我正在使用ostream运算符编写c ++链表,而且我被卡住了。 我做错了什么?
// Train class
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){
os << car->print(os);
return os;
}
错误:' - &gt;'的基本操作数有非指针类型'const Car'
make:*** [Car.o]错误1
我尝试过的事情:
1)os&lt;&lt;小车 - &GT;打印(* OS);
2)os&lt;&lt; car.print(OS); //它变得更糟
答案 0 :(得分:2)
我尝试过的事情:
1)os&lt;&lt;小车 - &GT;打印(* OS);
base operand of ‘->’ has non-pointer type ‘const Car’
错误应该很清楚。您已在非指针(不重载该运算符的类型)上应用了间接成员访问运算符->
。那不是你不能做的事情。据推测,您打算打电话给Car::print
。这可以使用常规成员访问运算符.
ostream& os print(*os)
这是错误的。 ostream
没有间接运算符。由于print
接受ostream&
作为参数,因此您可能打算将os
传递给函数。
void Car::print
Car::print
返回void
,即它不会返回任何值。但是,您将返回值插入流中。您无法将void
插入流中。如果您打算从函数返回一些内容,则将返回类型更改为您要插入到流中的任何内容。或者,如果您只打算在函数中将内容插入到流中,那么就不要插入函数的返回值:
当我们解决所有这三件事时,我们最终会
car.print(os);
最后,Car::print
的定义中未声明Car
。必须在类定义中声明所有成员函数。声明应如下所示:
class Car{
public:
void print(ostream& out) const;
// ...
}