我有一个模板类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]
实际上是一个指针数组吗?),或者我认为应该起作用的某些东西是不正确的。请解释导致失败的技术原因以及解决方法。
最佳答案
成员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'.
关于c++ - “从int到int *的转换无效”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26197980/