简体   繁体   中英

Initializing a 2D array member of a class in a constructor

I am getting a compile error setting a 2D array class member in the constuctor:

#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() { }

I am getting the following error:

./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;
                  ^

I have tried different variations, eg "&arr_[0] = arr;" did not work.

Thank you, Ahmed.

Try to avoid using C style arrays and start using C++ containers like std::vectors, std::array, std::maps, etc.

In your code you tried to directly assign a array, which is not according to the rules and hence error would be lvalue must be modifiable value.

在此处输入图片说明

This problem can be rectified by visiting error : expression must be a modifiable lvalue

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM