簡體   English   中英

操作員超負荷混亂

[英]Operator overloading confusion

我知道已經發布了許多有關運算符重載的問題,但是我無法讓我的代碼與我發現的任何示例一起使用。 是的,我已經看過此鏈接 ,但是仍然很難理解。

我正在嘗試僅重載前綴運算符,但收到一條錯誤消息,指出后綴期望為int。 我不嘗試修改后綴運算符。 我有一個.h文件和一個.cpp文件。 在我的.h文件中,我有類似以下內容:

class X{
public:
        /* ... declarations of X ... */
        X& operator--(X& x);
};

在.cpp文件中,我有類似以下內容:

#include "X.h"
namespace X{
X& X::operator--(X& x){/*...*/}
}

誰能告訴我我做錯了什么?

前綴--運算符不帶參數。 其定義應如下:

public:
    /* ... declarations of X ... */
    X& operator--();
};

同樣在實現它時:

#include "X.h"
namespace X {
    X& X::operator--() {/*...*/}
}
 X& operator--(X& x); 

一定是:

X& operator--();

背景:編譯器認為您已給--運算符指定了一個參數。 的后綴版本--需要一個參數,所以它認為你的意思是一個。 但是,按照慣例,該參數的類型必須為int 因此,它確切地告訴您: postfix 'X& X::operator--(X&)' must take 'int' as its argument

編譯器還可以告訴你,像prefix 'X& X::operator--(X&)' must not take any argument ,如果它想。 但是,哦。 它就是這樣兒的。 產生任何診斷消息就足以符合C ++標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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