错误:' - >'的基本操作数有非指针类型'const'

时间:2018-04-08 23:57:38

标签: c++ class operator-overloading ostream

我正在使用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); //它变得更糟

1 个答案:

答案 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;
    // ...
}