在构造函数中初始化类的2D数组成员

时间:2017-10-12 18:46:26

标签: c++ arrays

我在构造函数中设置了一个2D数组类成员的编译错误:

#include <queue>
using namespace std;

#define N 11

struct Elem {
    Elem(uint32_t row, uint32_t col)
        : row_(row), col_(col)
    { }

    uint32_t row_, col_;
};

class Mycomp {
    public:
        Mycomp(int arr[][N])
        {
            arr_ = arr;
        }

        bool operator() (const Elem &lhs, const Elem &rhs)
        {
            return arr_[lhs.row_][lhs.col_] > arr_[rhs.row_][rhs.col_];
        }

        int arr_[][N];
};

int *mergeKArrays(int arr[][N], int k)
{
    Mycomp mycomp(arr);
    priority_queue<Elem, vector<Elem>, Mycomp> pq(mycomp);

    for (uint32_t i = 0; i < k; ++i) {
        pq.push(Elem(i, 0));
    }

    return (int *) arr;
}

int main() { }

我收到以下错误:

./mergek.cc: In constructor ‘Mycomp::Mycomp(int (*)[11])’:
./mergek.cc:23:22: error: incompatible types in assignment of ‘int (*)[11]’ to ‘int [0][11]’
             arr_ = arr;
                  ^

我尝试了不同的变体,例如&#34;&amp; arr_ [0] = arr;&#34;没用。

谢谢你, 艾哈迈德。

1 个答案:

答案 0 :(得分:0)

尽量避免使用C样式数组并开始使用C ++容器,如std :: vectors,std :: array,std :: maps等。

在您的代码中,您尝试直接分配一个数组,这不符合规则,因此错误将是左值必须是可修改的值。

enter image description here

这个问题可以通过访问来纠正 error : expression must be a modifiable lvalue