cout 新创建的对象抛出运行时错误
cout newly created object throws runtime error
我目前正在学习 C++,我正在努力学习我们的导师提供的示例。
他正在创建一个新对象 ("Strudel") 并立即输出它。
cout<<Strudel{"Nuss"};
这会造成运行时错误。
operator<<(basic_ostream<_CharT, _Traits>& __os,
^
/usr/...../include/c++/9/ostream:548:5: note: candidate template ignored: could not match 'const _CharT *' against 'Strudel'
operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
我也不确定这是否有效。除了我们在 class.
中看到的内容之外,我还没有找到像这样的教程
#include<iostream>
using namespace std;
class Strudel{
public:
string Inhalt;
Strudel(string x):Inhalt{x}{
if(Inhalt.size()==0){
throw runtime_error("kein Name!");
}
}
ostream& print(ostream & os){
return os<<this->Inhalt<<"-Strudel";
}
};
ostream & operator<<(ostream &os, Strudel &s){
return s.print(os);
}
int main(){
Strudel x{"Mohn"};
cout<<x<<endl;
cout<<Strudel{"Nuss"};
return 0;
}
Strudel{"Nuss"}
是一个临时值,它们不能绑定到非常量引用(尽管 visual studio 错误地允许您绑定)。
您需要更正操作员的签名以获取 const 引用:
ostream & operator<<(ostream &os, const Strudel &s){
然后您还需要将 print
标记为 const
以便可以从 const
引用调用它:
ostream& print(ostream & os) const{
我目前正在学习 C++,我正在努力学习我们的导师提供的示例。 他正在创建一个新对象 ("Strudel") 并立即输出它。
cout<<Strudel{"Nuss"};
这会造成运行时错误。
operator<<(basic_ostream<_CharT, _Traits>& __os,
^
/usr/...../include/c++/9/ostream:548:5: note: candidate template ignored: could not match 'const _CharT *' against 'Strudel'
operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
我也不确定这是否有效。除了我们在 class.
中看到的内容之外,我还没有找到像这样的教程#include<iostream>
using namespace std;
class Strudel{
public:
string Inhalt;
Strudel(string x):Inhalt{x}{
if(Inhalt.size()==0){
throw runtime_error("kein Name!");
}
}
ostream& print(ostream & os){
return os<<this->Inhalt<<"-Strudel";
}
};
ostream & operator<<(ostream &os, Strudel &s){
return s.print(os);
}
int main(){
Strudel x{"Mohn"};
cout<<x<<endl;
cout<<Strudel{"Nuss"};
return 0;
}
Strudel{"Nuss"}
是一个临时值,它们不能绑定到非常量引用(尽管 visual studio 错误地允许您绑定)。
您需要更正操作员的签名以获取 const 引用:
ostream & operator<<(ostream &os, const Strudel &s){
然后您还需要将 print
标记为 const
以便可以从 const
引用调用它:
ostream& print(ostream & os) const{