我在构造函数中设置了一个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;没用。
谢谢你, 艾哈迈德。
答案 0 :(得分:0)
尽量避免使用C样式数组并开始使用C ++容器,如std :: vectors,std :: array,std :: maps等。
在您的代码中,您尝试直接分配一个数组,这不符合规则,因此错误将是左值必须是可修改的值。
这个问题可以通过访问来纠正 error : expression must be a modifiable lvalue