[英]'invalid conversion from int to int*'
我有一个模板类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'.
您触及到了头:T * data [10]是一个指针数组。
将您的成员数组更改为:
T data[10];
...你会没事的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.