实现重载运算符'<<'时出错 - C++
Posted
技术标签:
【中文标题】实现重载运算符\'<<\'时出错 - C++【英文标题】:Error when implementing overloaded operator '<<' - C++实现重载运算符'<<'时出错 - C++ 【发布时间】:2012-08-21 05:26:46 【问题描述】:我目前正在尝试重载 '
在函数'std::ostream& operator
重载的运算符函数在Linkedlist实现文件中被声明为友元成员函数,因为它会访问一个私有成员变量(head_ptr):
std::ostream& operator <<(std::ostream& outs, const Linkedlist& source)
node* cursor;
for(cursor = source.get_head(); cursor != NULL; cursor = cursor->fetchLink())
outs << cursor->fetchData() << " ";
return(outs);
这是Linkedlist头文件中的函数原型:
friend std::ostream& operator <<(std::ostream& outs, const Linkedlist& source);
我已经爬网了,到目前为止还没有找到解决方案。任何建议都会很棒!
【问题讨论】:
【参考方案1】:您的 cursor->fetchData() 是否返回 std::string?如果是这样,您必须#include <string>
。
或者,试试
outs << cursor->fetchData().c_str() << " ";
【讨论】:
【参考方案2】:对您将来可能发布的帖子的建议:如果您在问题中发布部分代码,请发布所有相关位。目前尚不清楚fetchData()
会返回什么。
从外观上看,fetchData()
返回的东西似乎没有 std::ostream::<<
的重载。
当您输出到std::ostream
实例时,所有组件都必须具有已定义的行为。例如,在下面的示例中,要使<<
与A
的实例一起工作,操作员必须直接使用x
或B
需要定义一些行为,其中它推送一些标准已知的值ostream
运营商。否则,您必须为链中的所有内容提供重载。
class B
friend std::ostream& operator<<(std::ostream& stream, const B& b);
int x = 10;
;
class A
private:
B b;
friend std::ostream& operator<<(std::ostream& stream, const A& a);
;
std::ostream& operator<<(std::ostream& stream, const B& b)
stream << b.x;
return stream;
std::ostream& operator<<(std::ostream& stream, const A& a)
stream << a.b;
return stream;
int main()
A a;
std::cout << a << "\n";
return 0;
我怀疑fetchData()
返回的类型没有<<
运算符的重载。这就是你看到失败的原因。
你只能做两件事
-
确保
fetchData()
返回的类型具有<<
的重载。 C++ 本机和字符串类型(在<string>
中)已经具有此功能。如果是自定义类型,则必须为该类型编写重载。
从fetchData
返回一个字符串。这样您就可以在<string>
中为<<
使用std::string
重载。
正如我之前所说,在不知道 fetchData()
返回什么的情况下,很难说这里出了什么问题。
【讨论】:
以上是关于实现重载运算符'<<'时出错 - C++的主要内容,如果未能解决你的问题,请参考以下文章