我有一个模板类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/

10-14 11:23
查看更多