0

これはポストインクリメント演算子のオーバーロード宣言です。

loc loc::operator++(int x)
{
    loc tmp=*this;
    longitude++;
    latitude++;
    retrun tmp;
} 

私のクラスコンストラクター

loc(int lg, int lt) 
{
   longitude = lg;
   latitude = lt;
}

メイン関数では、以下のようにコーディングしました

int main()
{
    loc ob1(10,5);
    ob1++;
}

これをコンパイルしているときに、以下のエラーが発生します

opover.cpp:56:5: エラー: 'loc loc::operator++(int)' のプロトタイプがクラス 'loc' のいずれとも一致しません opover.cpp:49:5: エラー: 候補は: loc loc::operator++( ) opover.cpp: 関数 'int main()' 内: opover.cpp:69:4: エラー: 接尾辞 '++' に対して 'operator++(int)' が宣言されていません</p>

4

3 に答える 3

4

からクラス宣言を修正します

class loc
{
    // ...
    loc operator++();
} 

class loc
{
    // ...
    loc operator++(int);
} 

[編集により、値による戻りに​​関する誤解を招く発言が削除されました。もちろん、値による戻りは、後置演算子++の通常のセマンティクスです]

于 2011-11-04T07:56:19.803 に答える
3

次の 2 つのバージョンが必要です++

loc& loc::operator++() //prefix increment (++x)
{
    longitude++;
    latitude++;
    return *this;
} 

loc loc::operator++(int) //postfix increment (x++)
{
    loc tmp(longtitude, langtitude);
    operator++();
    return tmp;
}

もちろん、両方の関数をクラス プロトタイプで定義する必要があります。

loc& operator++();
loc operator++(int);
于 2011-11-04T07:58:38.903 に答える
1

クラス定義でオーバーロードされた演算子を宣言していません。

クラスは次のようになります。

class loc{
public:
    loc(int, int);
    loc operator++(int);
    // whatever else
}

** 編集 **

コメントを読んだ後、あなたのエラーメッセージにあなたが宣言したことが示されていることに気づいたloc operator++()ので、それを修正してください。

于 2011-11-04T07:55:42.353 に答える