'无效转换从int到int *'

时间:2014-10-04 23:00:31

标签: c++ templates reference

我有一个模板类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]实际上是一个指针数组?),或者我认为应该工作的东西不是。

请解释为什么会失败以及如何解决问题的技术原因。

2 个答案:

答案 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];

......你会没事的。