error: base operand of ‘->’ has non-pointer type ‘const’
error: base operand of ‘->’ has non-pointer type ‘const’
我正在使用 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 << 汽车->打印(*os);
2) os << car.print(os); // 情况变得更糟
Things I have tried:
1) os << car->print(*os);
base operand of ‘->’ has non-pointer type ‘const Car’
错误应该很清楚了。您已将间接成员访问运算符 ->
应用于 non-pointer(不重载该运算符的类型)。那是你做不到的。据推测,您打算改为调用 Car::print
。这可以使用常规成员访问运算符 .
来完成
ostream& os
print(*os)
这是错误的。 ostream
没有间接运算符。由于 print
接受 ostream&
作为参数,因此您可能打算将 os
传递给函数。
void Car::print
Car::print
returns void
即它没有 return 任何值。然而,您将 return 值插入到流中。您不能将 void
插入到流中。如果您打算从函数中 return 某些内容,请将 return 类型更改为您打算插入到流中的任何类型。或者,如果您只想将内容插入到函数内的流中,那么就不要插入函数的 return 值:
当我们解决所有这三个问题时,我们最终会得到
car.print(os);
最后,Car::print
没有在 Car
的定义中声明。所有成员函数都必须在 class 定义中声明。声明应如下所示:
class Car{
public:
void print(ostream& out) const;
// ...
}
我正在使用 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 << 汽车->打印(*os);
2) os << car.print(os); // 情况变得更糟
Things I have tried:
1) os << car->print(*os);
base operand of ‘->’ has non-pointer type ‘const Car’
错误应该很清楚了。您已将间接成员访问运算符 ->
应用于 non-pointer(不重载该运算符的类型)。那是你做不到的。据推测,您打算改为调用 Car::print
。这可以使用常规成员访问运算符 .
ostream& os print(*os)
这是错误的。 ostream
没有间接运算符。由于 print
接受 ostream&
作为参数,因此您可能打算将 os
传递给函数。
void Car::print
Car::print
returns void
即它没有 return 任何值。然而,您将 return 值插入到流中。您不能将 void
插入到流中。如果您打算从函数中 return 某些内容,请将 return 类型更改为您打算插入到流中的任何类型。或者,如果您只想将内容插入到函数内的流中,那么就不要插入函数的 return 值:
当我们解决所有这三个问题时,我们最终会得到
car.print(os);
最后,Car::print
没有在 Car
的定义中声明。所有成员函数都必须在 class 定义中声明。声明应如下所示:
class Car{
public:
void print(ostream& out) const;
// ...
}