我需要创建一个模板,因为我不知道它是一个数组。它需要具有构造函数中传递的大小。所以这就是我得到的,我得到了各种各样的错误。我是C ++的初学者,所以感谢任何帮助:)
template <typename T, int N>
class Array
{
public:
T& operator[](int index)
{
return data[index];
}
private:
int size;
T *data[N];
};
我想你明白我在做什么。正如您所看到的,我还需要重载下标运算符。不确定我是否需要引用或指针或什么。我确实有一个构造函数,但它没有正常工作。
答案 0 :(得分:0)
这是一个带有示例主要版本的更正版本:
#include <iostream>
using namespace std;
template <typename T, int N>
class Array
{
public:
T& operator[](int index)
{
// add check for array index out of bounds i.e. access within 0 to N-1
return data[index];
}
Array() {
data = new T[size = N];
}
~Array() {
if (data)
delete [] data;
}
private:
int size;
T *data;
};
int main(void) {
Array<int, 4> a;
a[0] = 5;
cout << a[0] << endl;
return 0;
}
答案 1 :(得分:-1)
从我可以看到你的模板包含一个指针的数组,从我读的和你的[]运算符实现不是你打算做的。首先,您应该从
中删除 *T *data[N];
您可能应该从构造函数初始化模板的大小,因此您应该更改:
T *data[N];
到:
T* data;
和:
template <typename T, int N>
到:
template<typename T>
现在稍微改变了实现,你现在应该写一个像这样的构造函数:
template<typename T>
Array(int n) {
data = new T[n];
}
现在你还应该添加这样的析构函数:
~Array() {
delete[] data;
}
然后你去:)
但是,如果你想将大小保持为模板的参数,你的构造函数就像:
template<typename T, int N>
Array() {
}
和数据声明:
T data[N];
正如评论中所说,你可能想在“现实生活”条件下使用std :: array,但作为一种训练,实现你自己的数组是一件好事,这毕竟是大多数计算机学校的培训。