C++ 重载运算符错误:没有匹配的函数

C++ 重载运算符错误:没有匹配的函数,c++,operator-overloading,tostring,C++,Operator Overloading,Tostring,我的FileDir.cpp实现文件中有此重载运算符: std::ostream& operator<< (std::ostream &out, const FileDir &obj) { out << obj.toString(); return out; } std::ostream&operator您没有将toString声明为const成员函数(可在const对象上调用的函数)。operator中的参数o

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

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

std::ostream&operator您没有将
toString
声明为
const
成员函数(可在
const
对象上调用的函数)。
operator中的参数
obj
在toString声明中添加了常量:std::string toString()const;对于实现:string FileDir::toString()const{…}但是我仍然得到了错误。完全相同的错误?你确定你保存了所有的更改?是的,我确实保存了更改。除了以前的错误之外,现在还有一个错误:“std::string FileDir::toString()const”的原型与类“FileDir”string FileDir::toString()const^FileDir.h:34:17:错误:候选项是:std::string FileDir::toString()std::string toString()const^@绝对初学者:胡乱猜测:问题可能是您在函数定义中使用了
string
而不是
std::string
,因此编译器使用了另一种
string
类型?@fabioturate我将其更改为std::string,仍然有相同的结果。
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*’
#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;

};