C++ c++;指向另一个类错误的指针;没有与这些操作数匹配的运算符。”;

C++ c++;指向另一个类错误的指针;没有与这些操作数匹配的运算符。”;,c++,compiler-errors,operators,C++,Compiler Errors,Operators,编辑* 我很笨。。。谢谢你帮我解决了这个问题。 * 在我的car类中,下面的代码不断给我一个错误,因为Your print()函数已经将输出发送到cout,因此无需再次尝试发送。而不是 cout << "Driver: " << driver->print(); cout您的print()函数已将输出发送到cout,因此无需再次尝试发送。而不是 cout << "Driver: " << driver->print(); cO

编辑* 我很笨。。。谢谢你帮我解决了这个问题。 * 在我的car类中,下面的代码不断给我一个错误,因为Your print()函数已经将输出发送到
cout
,因此无需再次尝试发送。而不是

cout << "Driver: " << driver->print(); 
cout您的print()函数已将输出发送到
cout
,因此无需再次尝试发送。而不是

cout << "Driver: " << driver->print(); 

<代码> cOUT> P>这样做的C++方法是实现代码> STD::OSRoo&

。这样做的C++方法是实现<代码> STD::oSoo&成员函数<代码>打印< /COD>返回“代码>空格< /代码>。不能将

无效
插入流中。如果更改打印函数以获取流引用并添加调用打印的重载运算符,则只需将对象本身插入流中即可;那会更地道

template <class Elem, class Traits>
void Car::print(std::ostream<Elem, Traits>& out) {
    out << "Model: " << model << '\n';
    out << "Driver: " << *driver;
    out << "Owner: " << *owner;
}

template <class Elem, class Traits>
std::ostream<Elem, Traits>& out, const Car& car) {
    return out << car;
}
模板
作废Car::打印(标准::ostream&out){

out成员函数
print
return
void
。不能将
void
插入流中。如果将打印函数更改为获取流引用并添加调用print的重载运算符,则只需将对象本身插入流中即可;这将更为惯用

template <class Elem, class Traits>
void Car::print(std::ostream<Elem, Traits>& out) {
    out << "Model: " << model << '\n';
    out << "Driver: " << *driver;
    out << "Owner: " << *owner;
}

template <class Elem, class Traits>
std::ostream<Elem, Traits>& out, const Car& car) {
    return out << car;
}
模板
作废Car::打印(标准::ostream&out){

你称编译器错误为“bugs”?你称编译器错误为“bugs”?
toString()这不是java。规范的方法是实现
std::ostream&operator@juanchopanza谢谢你提醒我,我相应地修改了答案。@juanchopanza:但请注意,C++11在字符串中添加了
std::to_string
,这实际上是有用的,至少对某些类型是有用的。@JerryCoffin当然,但我更喜欢使用output stream运算符。如果它在实现中使用字符串则是另一回事。@juanchopanza:哦,我对此没有任何意见(事实上,您的答案中有一张赞成票来自我)。
toString()这不是java。规范的方法是实现
std::ostream&operator@juanchopanza谢谢你提醒我,我相应地修改了答案。@juanchopanza:但请注意,C++11在字符串中添加了
std::to_string
,这实际上是有用的,至少对某些类型是有用的。@JerryCoffin当然,但我更喜欢使用output stream运算符。如果它在实现中使用字符串则是另一回事。@juanchopanza:哦,我对此没有异议(事实上,你的答案中有一张赞成票来自我).Wow谢谢。之后我可能应该睡一会儿lol。Wow谢谢。之后我可能应该睡一会儿lol。你确定在这种情况下可以返回reference
std::string&
吗?你确定在这种情况下可以返回reference
std::string&
cout << "Driver: " << driver->print(); 
 cout << "Driver: " << driver; 
#include <iostream>

std::ostream& operator<<(std::ostream& o, const Person& p) {
  return o << "Name: " << p.getName() << " Age: " << p.getAge();
}
Person p("Bob", 23);
std::cout << p << "\n";
template <class Elem, class Traits>
void Car::print(std::ostream<Elem, Traits>& out) {
    out << "Model: " << model << '\n';
    out << "Driver: " << *driver;
    out << "Owner: " << *owner;
}

template <class Elem, class Traits>
std::ostream<Elem, Traits>& out, const Car& car) {
    return out << car;
}
const std::string& Person::print() const
{
    return "Name " + name + "\n" + "Age " + age + "\n";    
}