模板(C ++) - 不知道是否正确(Template (C++) - not sure if co

2019-09-17 12:52发布

我是一名学生,我做的在C ++数组静态库,所以我没有在课堂上每次都重写代码。

我在一所中学的第二年,所以我不是专家。 我想我的代码与所有类型(整数,浮点,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;
}

代码给我错误,当我试图用inizialize类:

Array <int> vct(5);

Answer 1:

模板实现需要是专门它们翻译单元可见。

移动实现从头文件cpp

其他一些注意事项:

  • unsigned short i;unsigned short j; 应使本地,没有必要让他们成为全局变量。

  • 首先是宏_后跟一个大写字母被保留,所以_SLARRAY_是非法的,将其重命名。

  • 实现一个赋值操作符和拷贝构造函数,否则所有的复制将是浅薄。

我假设你不能使用std ,否则大家都知道,容器已经存在那里,对不对?



文章来源: Template (C++) - not sure if correct