c++ - 在 myVector 类中重载运算符 + 时出错
问题描述
我知道这个问题在这里和互联网上出现过很多次,但即使通过在这个网站上搜索,我也不能在课堂上超载+
运算符。myvec
奇怪的是我可以重载=
运算符,但是当我编写运算符的声明和定义时+
,我得到了一个错误。
更具体地说,我将运算符声明为
myvec& myvec::operator+(const myvec& v, const myvec& w)
定义是
myvec& myvec::operator +(const myvec& v, const myvec& w)
{
int d = v.size();
myvec x(d);
for (int i = 0; i < d; i++) {
x(i) = v(i)+w(i);
}
return x;
}
在下面我的小班:
#include <iostream>
#include <cmath>
using namespace std;
class myvec {
private:
int dimension;
double* data;
public:
myvec(int dim);
myvec(const myvec& v);
~myvec();
int size() const;
void Print();
double& operator ()(int i);
myvec& operator =(const myvec& v);
myvec& operator +(const myvec& v, const myvec& w);
};
myvec::myvec(int dim)
{
dimension = dim;
data = new double[dim];
for (int i = 0; i < dimension; i++) {
data[i] = 0.0;
}
}
myvec::myvec(const myvec& v)
{
int dimensione = v.size();
data = new double[dimensione];
for (int i = 0; i < dimensione; i++) {
data[i] = v.data[i];
}
}
myvec::~myvec()
{
dimension = 0;
delete[] data;
data = NULL;
}
int myvec::size() const
{
return dimension;
}
double& myvec::operator ()(int i)
{
return data[i];
}
myvec& myvec::operator =(const myvec& v)
{
int dim = v.size();
for (int i = 0; i < dim; ++i) {
data[i] = v.data[i];
}
return *this;
}
myvec& myvec::operator +(const myvec& v, const myvec& w)
{
int d = v.size();
myvec x(d);
for (int i = 0; i < d; i++) {
x(i) = v(i)+w(i);
}
return x;
}
void myvec::Print()
{
for (int i = 0; i < dimension; i++) {
cout << data[i]<<endl;
}
}
编译器给了我错误:
testmyvec.cpp.cc:77:59: error: ‘myvec& myvec::operator+(const myvec&, const myvec&)’ must take either zero or one argument
它显然是指+
操作员的定义。如何修复它以使操作员超载?
解决方案
编译器已经给了你答案:“必须接受零或一个参数”。
声明应该是myvec operator+(const myvec&);
并且在您使用的定义中this
是这样的:
myvec myvec::operator +(const myvec& w)
{
int d = v.size();
myvec x(d);
for (int i = 0; i < d; i++) {
x(i) = (*this)(i) + w(i);
}
return x;
}
并且不要返回对本地对象的引用。
推荐阅读
- nsis - 使用 NSIS,用户如何修改它以包含超过 8192Bytes?
- python - 如何使用 python selenium 查找拼写错误
- r - 使用 ggplot 和 for 循环在同一页面上绘制多个图
- android - 如何在 react-native-webview 中启用安全上下文?
- minecraft - Minecraft Fabric Modding(模型问题)
- python - 如何删除 tkinter 窗口的边框而不使其位于最顶层?
- python - 如何在vim的同一目录中导入python模块?
- mysql - Typeorm添加数据库名称
- excel - VBA 滚动平均值
- reactjs - 为什么 useSelector 结果与 useEffect 状态更新配对时会冻结我的应用程序?