繁体   English   中英

重载运算符错误:无匹配功能

[英]overloading operators error: no matching function

我的FileDir.cpp实现文件中有这个重载的运算符:

 std::ostream& operator<< (std::ostream &out, const FileDir &obj) {
        out << obj.toString();
        return out;
 }

这是我的toString()函数:

string FileDir::toString()

{
    std::string whatever;
    std::stringstream converter;
    converter << size;
    converter >> whatever;

    std::string combined;
    if (type == false) { 
        combined = name + " " + whatever + "kb";
    }
    if (type == true) {
        combined = name + "/" + " " + whatever + "kb";
    }
    return combined;
}

这是我得到的错误:

FileDir.cpp: In function ‘std::ostream& operator<<(std::ostream&, const FileDir&)’:
FileDir.cpp:125:25: error: no matching function for call to ‘FileDir::toString() const’
     out << obj.toString();
                         ^
FileDir.cpp:125:25: note: candidate is:
FileDir.cpp:84:8: note: std::string FileDir::toString() <near match>
 string FileDir::toString()
        ^
FileDir.cpp:84:8: note:   no known conversion for implicit ‘this’ parameter from ‘const FileDir*’ to ‘FileDir*’

这是我的FileDir.h头文件:

#include <sstream> 

class FileDir {
public:
    FileDir();
    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);
    bool operator<(const FileDir &obj);    

private:
    std::string name;
    long size;
    bool type;

};

我认为我的toString()声明有问题,但我不确定。

如何解决错误?

您没有将toString声明为const成员函数(可以在const对象上调用的const )。 operator<<的参数objconst ,因此toString必须是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM