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

问题描述 投票:-1回答:1

我正在用 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;
}

: '->'的基本操作数是非指针类型'const Car' make。***[Car.o] 错误 1

我尝试过的事情。1) os <<car->print(*os); 2) os <<car.print(os); /情况越来越糟。

c++ class operator-overloading ostream
1个回答
3
投票

我试过的事情。

1) os << car->print(*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;
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.