【发布时间】:2020-02-04 11:50:03
【问题描述】:
我正在尝试使用数组作为映射键。我让它工作了,但是一旦我尝试将它集成到一个类中,我就会收到以下编译器错误:
在“T& Matrix::operator[](std::array) [with T = double]”的实例化中: 35:12:从这里需要 20:24:错误:不匹配调用‘(std::map, double, std::less >, std::allocator, double> > >) (const std::array&)’ 返回矩阵(索引);
这是我的代码的样子:
#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;
}
【问题讨论】:
-
您还在地图上调用
operator() (std::array<int ,2>),而不是at(std::array<int, 2>)(在您的operator[]函数中)。 -
为什么要使用
array而不是tuple?
标签: c++ arrays c++11 maps operator-overloading