[英]non-member function operator+(…) cannot have cv-qualifier
我目前正在編寫一個程序來模擬盒子中的氣體。 但是我遇到了與類運算符有關的問題。 不幸的是,讓這個類煩人的是Vector,我知道有些人不喜歡它被稱為Vector。
向量
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 operator+(const Vector v) const{
Vector v2(*this);
v2+=v;
return v2;
}
和他的產量錯誤:
C:\\ Users \\ XXXXX \\ ClionProjects \\ XXXXX \\ YYYYY \\ Vector.cpp:95:34:錯誤:非成員函數'Vector operator +(Vector)'不能具有cv限定詞
C:\\ Users \\ XXXXX \\ ClionProjects \\ XXXXX \\ YYYYY \\ Vector.cpp:在函數'Vector operator +(Vector)'中:
任何幫助,不勝感激。
該錯誤告訴您出了什么問題。 您創建了這些非成員函數,但它們應該是成員函數。 編譯器通過您(正確)使用const
檢測到該問題,盡管也缺少參數的數量,一旦解決了第一個問題,這將是進一步的編譯錯誤。
您要么忘記將這些函數定義放在class Vector { ... };
區域,否則您忘了在operator
之前寫Vector::
。
只有成員函數可以具有const
說明符。 您的兩個運算符都是非成員函數(因為它們缺少作為其簽名一部分的類名),並且未在類定義內定義。
結果,您有一個編譯錯誤。
要解決此錯誤,您需要將operator+
轉換為自由函數:將其聲明從Vector
類中刪除,並將其簽名更改為(最簡單的形式):
Vector operator+ (const Vector& lhs, const Vector& rhs);
有某些原因使用不同的簽名,並按值接受第一個參數,但這對您的級別來說太深了,因此我建議暫時堅持使用const引用。
感謝您的其他投入,兩者都有可取之處。 我已經根據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;
}
這是結果,我希望這是編碼的合法方法,而不是無恥的方式,但是會導致以后的問題。 我的專案取得了進展,到目前為止沒有任何進展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.