我在中学读第二年,所以我不是专家.
我希望我的代码与所有类型(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);解决方法 模板实现需要对专门化它们的翻译单元可见.
将实现从cpp移动到头文件.
其他几点说明:
> unsigned short i; unsigned short j;应该是本地的,没有必要将它们作为全局变量.
>以_开头后跟大写字母的宏被保留,因此_SLARRAY_是非法的,重命名它.
>实现赋值运算符和复制构造函数,否则所有复制都将变浅.
我假设你不能使用std,否则你知道容器已经存在了,对吗?
总结以上是内存溢出为你收集整理的模板(C) – 不确定是否正确全部内容,希望文章能够帮你解决模板(C) – 不确定是否正确所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)