2015-10-04 75 views
0

我知道有很多关于运算符重载的问题,但我无法让我的代码与我找到的任何示例一起工作。是的,我看了一下 this link,但我仍然无法理解这一点。运算符重载混淆

我想重载只是前缀运算符,但我得到一个错误,说postfix期望一个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){/*...*/} 
} 

谁能告诉我我在做什么错误?

+0

你能告诉试图用你的功能和精确的编译器错误的例子。 – CoryKramer

+0

个人而言,我避免了操作符重载,因为它比值得更麻烦 –

+0

为什么cpp文件在X命名空间中具有类X的成员函数?头文件中不是这种情况。 –

回答

2

前缀--运算符不带任何参数。它的定义应该如下:执行它时

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

而且类似:

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

好吧,这现在更有意义。谢谢。 –

1
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++标准。