我有一个模板类template <typename T> class SomeClass
。它有一个成员T* data[10]
和一个方法:
void add(const T& item){
data[indexToInsert++] = item;
}
在main()
中,有以下代码:
SomeClass<int> container;
container.add(10);
在第二行,我收到此错误:
invalid conversion from int to int*
我不明白为什么会收到此错误。整数10
作为const引用传递给add()
。然后,作为const引用,它被分配给一个指针数组。
我的一些假设是错误的(例如,T* data[10]
实际上是一个指针数组?),或者我认为应该工作的东西不是。
请解释为什么会失败以及如何解决问题的技术原因。
答案 0 :(得分:1)
成员data
被声明为T*
的数组,即你自己说的指针数组。
T* data[10] // 'data' is an array of T*.
声明T
使用的数组:
T data[10]; // 'data' is an array of T.
您收到错误是因为您尝试将int
分配给类型为int*
的数组元素。有符号整数不可以隐式转换为地址/指针。
还要记住,引用基本上是对象的别名,即它的行为就像传递对象本身但具有引用语义一样。您可以不分配对指针的引用,但可以分配对象的引用。
int i = 5;
int& r = i; // Reference to 'i';
int* p = &i; // Pointer to 'i'.
std::cout << r << std::endl; // Outputs '5'.
std::cout << p << std::endl; // Outputs the address of 'i'.
答案 1 :(得分:0)
你击中了头部:T * data [10]是一个指针数组。
将您的成员数组更改为:
T data[10];
......你会没事的。