运算符重载:"operator+"必须采用零个或一个参数
operator over loading: "operator+"must take either zero or one argument
我有一个名为 IntMatrix 的矩阵类
namespace mtm
{
class IntMatrix
{
private:
int** data;
int col;
int row;
public:
IntMatrix(int row,int col,int num=0);
IntMatrix(const IntMatrix& mat);
//some functions
IntMatrix ::operator+(int num) const;
friend IntMatrix operator+(const int &num, const IntMatrix& matrix);
};
//ctor
IntMatrix::IntMatrix(int row,int col, int num) :data(new int*[row]), col(col), row(row)
{
for (int i = 0; i < col; i++)
{
data[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col); j++)
{
data[i][j] = num;
}
}
}
}
我正在尝试重载运算符+,以便这将起作用:
//copy ctor
IntMatrix::IntMatrix(const IntMatrix& mat)
{
data=new int*[mat.row];
for(int i = 0; i < mat.row; i++)
{
data[i]=new int[mat.col];
}
row=mat.row;
col=mat.col;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
data[i][j]=mat.data[i][j];
}
}
}
IntMatrix IntMatrix::operator+(int num) const
{
IntMatrix new_Matrix(*this);
for(int i=0;i<new_Matrix.row;i++)
{
for(int j=0;j<new_Matrix.col;j++)
{
new_Matrix.data[i][j]+=num;
}
}
return new_Matrix;
}
// the function I have problem with:
IntMatrix IntMatrix::operator+(const int &num, const IntMatrix& matrix)
{
return matrix+num;
}
int main()
{
mtm::IntMatrix mat(2,1,3);
mtm::IntMatrix mat2=2+mat;
return 0;
}
无论我做什么,我都会不断收到此错误: 错误: 'mtm::IntMatrix mtm::IntMatrix::operator+(const int&, const mtm::IntMatrix&(' 必须采用零个或一个参数 IntMatrix IntMatrix::operator+(const int &num, const IntMatrix& matrix(
我试过了:
friend IntMatrix operator+(const int &num, const IntMatrix& matrix);
IntMatrix operator+(const int &num, const IntMatrix& matrix);
IntMatrix operator+(const int &num, const IntMatrix& matrix)const;
IntMatrix operator+(int &num, const IntMatrix& matrix);
IntMatrix operator+( int num, const IntMatrix& matrix);
然而我都遇到了同样的错误,所以有人知道正确的写法是什么吗?
使用friend
声明函数不会使其成为类的一部分。int+IntMatrix 运算符不是IntMatrix::operator+
- 它只是operator+
。
// wrong - delete this part
// vvvvvvvvvvv
IntMatrix IntMatrix::operator+(const int &num, const IntMatrix& matrix)
{
return matrix+num;
}
我不知道您为向矩阵添加标量定义了什么,但想象一下一段时间类似的东西
IntMatrix IntMatrix::operator+(int k) const
{
IntMatrix temp(this->x+k, this->y+k, this->z+k);
return temp;
}
所以有一个矢量 foo[0,1,2]
你可以做:
IntMatrix r = foo + 2;
和 r 将[2,3,4]
相关文章:
- 是否可以对零模板参数进行模板专门化
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 运算符重载:"operator+"必须采用零个或一个参数
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 具有多个参数的模板化类专用化,其中一个模板参数是模板本身
- 在 masm x64 上打印具有多个参数
- C++ 具有 2 个模板参数的类,具有 1 个参数的函数
- 可变参数模板作为第一个参数
- 在C++中使用 std::forward 的多个参数
- 如果条件,当我想第二个参数时
- 如何在 c++ 中存储具有值的四个参数的元组
- 将多个参数传递给运算符 []
- C++ 具有GTest TYPED_TEST的多个参数
- 如何从第一个参数推断第二个参数类型?
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- 如何将 std::function 的零个或多个参数用作 std::map 中的值
- 重载 * 运算符 - 必须采用零个或一个参数
- 具有零个或多个附加参数的可变参数宏
- 运算符需要零个或一个参数