在构造函数中传递指向数组的指针
Passing a pointer to an array in a constructor
我需要在构造函数中传递一个指向数组的指针(我知道在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*数组的指针?
根据C++标准
4.2数组到指针的转换[conv.Array]
类型为"N T的数组"或"T的未知界的数组"的左值或右值可以转换到类型为"pointer to 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.
};
您有两个问题:第一个问题是使用指针的数组而不是数组来调用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
对象的array传递给它。
如何在C的构造函数中有效地传递指向a*数组的指针?
C(array_id);
问题是C
构造函数不接受A*
的数组,而是接受A*
。
如果要将A*
的数组传递给C
构造函数,则需要声明它接受A**
:
C(A** a_array)
或者,等效地:
C(A* a_array[])
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”