错误:bool运算符==必须采用两个参数

时间:2015-04-06 23:17:40

标签: c++ class operator-overloading

我在此头文件的FileDir类中有一个operator == class成员:

#include <sstream>   

class FileDir {

public:   

    FileDir(std::string nameVal, long sizeVal = 4, bool typeVal = false);   

    FileDir(const FileDir &obj);   

    ~FileDir();            // destructor   

    long getSize() const;    

    std::string getName() const;   

    bool isFile() const;   

    std::string rename(std::string newname);     

    long resize(long newsize);    

    std::string toString();    

    bool operator== (const FileDir &dir1);        

private:

    std::string name;

    long size;

    bool type;

};

这是实施:

bool operator== (const FileDir &dir1) {

    if (this->name == dir1.name && this->size == dir1.size && this->type == dir1.type)

        return true;

    else

        return false;

}

这是我从编译器得到的错误:

FileDir.cpp:101:37: error: ‘bool operator==(const FileDir&)’ must take exactly two arguments
 bool operator== (const FileDir &dir1) {
                                     ^
make: *** [fdTest] Error 1

我认为既然运算符是一个类成员,它应该只有一个显式参数。那么为什么会出错?

3 个答案:

答案 0 :(得分:4)

就像任何成员函数一样,当您在函数体外定义它时,您需要在函数名称上添加Class::前缀。但在这种情况下,函数的名称是operator==。你需要:

bool FileDir::operator== (const FileDir &dir1) {
    //...
}

答案 1 :(得分:0)

尝试:

bool FileDir::operator== (const FileDir &dir1) const{
    if (this->name == dir1.name && 
        this->size == dir1.size && 
        this->type == dir1.type)
    return true;
else
    return false;        
}

OR

在类定义中执行您的实现。

答案 2 :(得分:0)

尝试:

friend bool operator==(const FileDir & dir) const;
在“ xxx.h”文件中的

定义您的功能。 您重载了'=='符号,因此必须将其定义为好友函数