将指针传递给构造函数中的数组

时间:2015-02-28 10:03:34

标签: c++ arrays pointers

我需要在构造函数中传递指向数组的指针(我知道在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 *数组

3 个答案:

答案 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[])