gpt4 book ai didi

c++ - 运算符<<不匹配

转载 作者:行者123 更新时间:2023-11-30 01:24:30 26 4
gpt4 key购买 nike

我有这样的代码片段:

class track {

public:

struct time {
unsigned minutes, seconds;

std::ostream& operator<<(std::ostream& o) {
o << minutes << "minute(s) " << seconds << " second(s)";
return o;
}
};

...

std::ostream& operator<<(std::ostream& o) {
o << "title: " << title << " performer: " << performer << " length: " << length << std::endl;
return o;
}

private:
std::string performer, title;
time length;
};

但是,如果我编译这段代码,我得到了这个错误:

no match for 'operator<< ...'

你能告诉我这段代码有什么问题吗?

最佳答案

如果你想要你的对象objT要支持典型的流式传输(例如 cout << obj ),您必须在全局范围内定义一个运算符:

std::ostream& operator<<(std::ostream& o, const T& obj) {
...
}

(如果函数需要访问私有(private)字段,可以声明为友元)

如果像在您的代码中一样,您将运算符声明为成员

std::ostream& T::operator<<(std::ostream& o)

你本质上是在定义这个:

std::ostream& operator<<(T& obj, std::ostream& o)

你可以这样使用它:obj << cout ,但这可能不是您想要的!

关于c++ - 运算符<<不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com