我目前正在编写一个模拟盒子中的气体的程序。但我遇到了类操作员的问题。不幸的是,为了让烦人的事情被称为Vector,我知道有些人不会喜欢它被称为。
Vector.h
class Vector {
private:
double x;
double y;
double z;
public:
Vector & operator+=(const Vector & v){
x += v.x;
y += v.y;
z += v.z;
return *this;
}
我编写了上面的代码,使这个问题更加清晰。我遗漏了构造函数等,因为它们不会影响问题。
对于.cpp
Vector.cpp
Vector operator+(const Vector v) const{
Vector v2(*this);
v2+=v;
return v2;
}
他的生活错误:
C:\ Users \ XXXXX \ ClionProjects \ XXXXX \ YYYYY \ Vector.cpp:95:34:错误:非成员函数'向量运算符+(向量)'不能有cv-qualifier
C:\ Users \ XXXXX \ ClionProjects \ XXXXX \ YYYYY \ Vector.cpp:在函数'Vector operator +(Vector)'中:
非常感谢任何帮助。
答案 0 :(得分:2)
错误告诉你错了什么。您创建了这些非成员函数,但它们应该是成员函数。编译器通过(正确)使用const
来检测问题,尽管缺少参数的数量,并且在修复第一个参数后会出现进一步的编译错误。
要么您忘记将这些功能定义放在class Vector { ... };
区域内,要么忘记在Vector::
之前写operator
。
答案 1 :(得分:1)
只有成员函数才能有const
个说明符。您的运算符都是非成员函数(因为它们缺少类名作为其签名的一部分),并且未在类定义中定义。
因此,您有编译错误。
要修复此错误,您需要将operator+
翻译为自由函数:从Vector
类中删除它的声明,并将其sigature更改为(最简单的形式):
Vector operator+ (const Vector& lhs, const Vector& rhs);
有一些理由使用不同的签名,并按值接受第一个参数,但这对于你的级别来说太深了,所以我建议现在坚持使用const引用。
答案 2 :(得分:1)
感谢其他投入,两者都有其优点。我根据Barry @BarryTheHatchet给出的答案找到了我自己的答案。和其他来源。 为了解决这个问题,我在公共部分的头文件中移动了定义,给了我:
Vector & operator+=(const Vector & v){
x += v.x;
y += v.y;
z += v.z;
return *this;
}
Vector operator+(const Vector v) const {
Vector VecPlus(*this);
VecPlus.x += v.x;
VecPlus.y += v.y;
VecPlus.z += v.z;
return VecPlus;
}
这是结果,我希望它是一种合法的编码方式,而不是一种狡猾的方式,但会导致后来的问题。我的项目进展顺利,到目前为止还没有提出。