繁体   English   中英

“从int到int *的转换无效”

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM