我需要在构造函数中传递指向数组的指针(我知道在C ++中使用普通数组被许多人视为不好的做法,但是现在我只想继续使用它。)
请考虑以下代码:
// let's omit includes
class A {
// irrelevant
}
class B {
public:
//irrelevant
void someMethod() {
_c = new C(array_id);
}
private:
C* _c;
A* array_id[SOME_CONST];
}
class C {
public:
C(A* a_array) : _array(a_array) {}
private:
A* _array;
}
尝试编译将导致:
error: no matching function for call to C::C(A* [SOME_CONST])'
据我所知,数组的标识符衰减到指向数组第一个元素的指针,但它似乎无法直接使用。如何在C?
的构造函数中有效地将指针传递给A *数组答案 0 :(得分:2)
根据C ++标准
4.2数组到指针的转换[conv.array]
可以转换“N T数组”或“T的未知数组”的左值或右值 到“指向T的指针”的prvalue。结果是指向的指针 数组的第一个元素。
像这样修改你的代码:
class C {
public:
typedef A* PTA[SOME_CONST];
C(PTA a_array) : _array(a_array) {}
private:
A** _array;//Note this line,type decays.
};
答案 1 :(得分:1)
您有两个问题:第一个问题是您使用数组指针调用C
构造函数,而不是数组。第二个问题是您尝试将该分配分配给不兼容的类型。
解决方案可能类似于
class B
{
public:
void someMethod()
{
my_c = new C(my_a_array);
}
private:
A my_a_array[SOME_CONST];
C* my_c;
};
这将分配一个类型为C
的单个对象,将A
个对象的数组传递给它。
答案 2 :(得分:1)
如何在C的构造函数中有效地将指针传递给A *数组?
C(array_id);
问题是C
构造函数不接受A*
数组,它接受A*
。
如果要将A*
数组传递给C
构造函数,则需要声明它以A**
:
C(A** a_array)
或等同地:
C(A* a_array[])