我是学生,我正在为C ++中的数组做一个静态库,所以我不必每次都在课程中重写代码。
我在中学读二年级,所以我不是专家。 我希望我的代码与所有类型(int,float,ecc。)兼容,但我遇到了一些麻烦。
你能看看我的代码吗?
// slarray.h
#if !defined _SLARRAY_
#define _SLARRAY_
template <typename Tipo> class Array {
public:
void inserisci();
void visualizza();
void copia(Tipo*);
Array(short);
~Array();
private:
Tipo* ary;
short* siz;
};
#endif
// slarray.cpp
#include <iostream>
#include "slarray.h"
unsigned short i;
unsigned short j;
template <typename Tipo> void Array<Tipo>::inserisci() {
for (i = 0; i < *siz; i++) {
std::cout << i << ": ";
std::cin >> ary[i];
}
}
template <typename Tipo> void Array<Tipo>::visualizza() {
for (i = 0; i < *siz; i++) {
std::cout << ary[i] << " ";
}
}
template <typename Tipo> void Array<Tipo>::copia(Tipo* arycpy) {
for (i = 0; i < *siz; i++) {
*(arycpy + i) = ary[i];
}
}
template <typename Tipo> Array<Tipo>::Array(short n) {
siz = new short;
*siz = n;
ary = new Tipo[n];
}
template <typename Tipo> Array<Tipo>::~Array() {
delete[] ary;
delete siz;
}
当我尝试用以下内容对类进行初始化时,代码给出了错误:
Array <int> vct(5);
答案 0 :(得分:2)
模板实现需要对专门化它们的翻译单元可见。
将实现从cpp
移动到头文件。
其他几点说明:
unsigned short i;unsigned short j;
应该是本地的,没有必要将它们作为全局变量。
保留以_
后跟大写字母开头的宏,因此_SLARRAY_
非法,重命名。
实现赋值运算符和复制构造函数,否则所有复制都将变浅。
我假设你不能使用std
,否则你知道那里已经存在容器了,对吗?