簡體   English   中英

非成員函數operator +(…)不能具有簡歷限定符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM