模板(C+;+;)-不确定是否正确 我是一个学生,我正在为C++中的数组做静态库,所以我不必每次上课时重写代码。

模板(C+;+;)-不确定是否正确 我是一个学生,我正在为C++中的数组做静态库,所以我不必每次上课时重写代码。,c++,class,templates,C++,Class,Templates,我在一所中学读二年级,所以我不是专家。 我希望我的代码与所有类型(int、float、ecc)兼容,但我遇到了一些问题 你能看看我的密码吗 // slarray.h #if !defined _SLARRAY_ #define _SLARRAY_ template <typename Tipo> class Array { public: void inserisci(); void visualizza(); void copia(Tipo*);

我在一所中学读二年级,所以我不是专家。 我希望我的代码与所有类型(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.h
#如果!定义的_SLARRAY_
#定义_SLARRAY_
模板类数组{
公众:
void inserisci();
void visualiza();
无效副本(Tipo*);
阵列(短);
~Array();
私人:
蒂波*阿里;
短*尺寸;
};
#恩迪夫

//slarray.cpp
#包括
#包括“slarray.h”
无符号短i;
无符号短j;
模板无效数组::inserisci(){
对于(i=0;i<*siz;i++){
std::cout-ary[i];
}
}
模板void数组::Visualiza(){
对于(i=0;i<*siz;i++){

std::cout模板实现需要对专门化它们的翻译单元可见

将实现从
cpp
移动到头文件

其他一些注意事项:

  • unsigned short i;unsigned short j;
    应该是局部变量,不需要将它们作为全局变量

  • 保留以
    \u
    开头,后跟大写字母的宏,因此
    \u SLARRAY\u
    是非法的,请重命名它

  • 实现赋值运算符和复制构造函数,否则所有复制都将是浅层的


我假设您不能使用
std
,否则您会知道容器已经存在,对吗?

您确实知道和,对吧?还有,.方法定义应该在头文件中。您可能会在我们的姐妹站点得到更好的答案。旁白:您已经违反了。现在它可以工作了,非常感谢!但是,编写是否应该简单头文件中的语法错误?我应该在.cpp文件中写什么?@Edoardo是的,模板就是这样工作的。通常没有相应的
cpp
文件,只有头文件。但是,通过这种方式,Visual studio不生成.lib文件。@Edoardo即使没有,也不需要库。不需要导出符号,因为实现都是可见的。这就是模板的工作方式。找到了方法。我在.cpp文件的底部添加了实现所需的实例化:模板数组;
// 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);