我正在尝试使用数组作为映射键。我可以使用它,但是一旦尝试将其集成到类中,就会遇到以下编译器错误:



这是我的代码如下所示:

#include <map>

template <typename T>
struct Matrix{
    std::map<std::array<int,2>,T> matrix;
    int rows;
    int columns;

    Matrix()
    : rows(0),
      columns(0)
    {  }

    Matrix(int rows,int columns)
    :  rows(rows),
    columns(columns)
    { }

    T& operator[](const std::array<int,2> index){
    return matrix(index);
}

    T& operator[](const std::array<int,2>& index) const{
    return matrix(index);
}

};

int main(int argc, char *argv[])
{
    Matrix<double> M(10,10);
    double a = 10;
    M[{10,11}] = a;


    return 0;
}

最佳答案

在这些运算符中

T& operator[](const std::array<int,2> index){
return matrix(index);
}

T& operator[](const std::array<int,2>& index) const{
return matrix(index);
}

您正在尝试调用类模板std::map的不存在的运算符
matrix(index)

显然,您的意思是第一个下标运算符
matrix[index]

T& operator[](const std::array<int,2> &index){
return matrix[index];
}

在第二个下标运算符中,成员函数位于。
const T& operator[](const std::array<int,2>& index) const{
return matrix.at(index);
}

同样,第二个运算符应声明为带有限定符const的返回类型,即它应该返回一个常量引用,因为成员函数又是一个常量函数。

关于c++ - 数组作为映射键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60056776/

10-09 12:58