重载ostream运算符实现C++链表时遇编译错误,请求排查问题
解决你的C++链表ostream运算符实现问题
嘿,我一眼就看到你代码里的两个问题啦,咱们一个个说清楚:
第一个直接编译错误:成员访问运算符用错了
你看到的报错error : base operand of ‘->’ has non-pointer type ‘const Car’原因很明确:operator<<里的car是const引用类型(const Car&),不是指针。对于引用类型的对象,我们要用.来访问成员函数,而指针才用->。
第二个隐藏问题:void返回值不能被输出
你的print函数返回类型是void,但你却写了os << car.print(os)——这根本行不通,因为ostream的<<运算符没有处理void类型的重载。其实你只需要直接调用car.print(os)就好,不用把它塞给os <<。
修正后的完整代码
#include <iostream> using namespace std; // 若未在其他地方引入std命名空间,需要这句来使用ostream和endl class Car{ public: void print(ostream&) const; friend std::ostream &operator<<(std::ostream&, const Car&); }; void Car::print(ostream& out) const{ out << "OK" << endl; } ostream& operator<<(ostream& os, const Car& car){ // 改用.访问成员函数,直接调用print完成输出 car.print(os); return os; }
这样修改后,当前的编译错误就会消失啦。如果之后要把这个逻辑扩展到链表,只需要在链表类的operator<<里遍历所有节点,逐个输出每个Car对象即可~
内容的提问来源于stack exchange,提问作者Billion Boi
相关产品推荐
相关产品推荐

