[英]Why does using my print method with std::cout result in an error?
#include <iostream>
using namespace std;
class Fam
{
public:
char you, urmom, urdad;
void addPerson(char y, char m, char f)
{
you = y;
urmom = m;
urdad = f;
}
};
class Tree: public Fam
{
public:
void showFamtree()
{
cout<< "Name: " << you << endl;
cout<< "Mother's name: " << urmom <<endl;
cout<< "Father's name: " << urdad <<endl;
}
};
int main(void)
{
Tree tree;
char a,b,c;
cin >> a;
cin >> b;
cin >> c;
tree.addPerson(a,b,c);
cout<< "Family tree: " << tree.showFamtree() <<endl;
return 0;
}
我想用該人的名字,母親的名字,父親的名字打印家譜,但是當我編譯它時,出現以下錯誤:
二進制表達式的無效操作數(
basic_ostream<char, std::char_traits<char> >
和void
)
tree.showFamtree()
返回任何內容(即void
),嘗試將其傳遞給std::cout
沒有任何意義。 你可能會改變
cout<< "Family tree: " << tree.showFamtree() <<endl;
至
cout << "Family tree: " << endl;
tree.showFamtree();
如果您這樣定義operator <<
ostream& operator << ( ostream & ostr , const Tree & t ){
ostr << "Name:" << t.you << endl
<< "Mother's name:" << t.urmom << endl
<< "Father's name:" << t.urdad << endl;
return ostr;
}
那么你可以使用
cout<< "Family tree: " << tree <<endl;
這在C ++中稱為運算符重載 。
要使用與此類似的東西:
void showFamtree()
{
cout<< "Name: " << you << endl;
cout<< "Mother's name: " << urmom <<endl;
cout<< "Father's name: " << urdad <<endl;
}
與:
cout << "Family tree: " << tree.showFamtree() << endl;
一種C ++方法是使用std :: stringstream,如下所示:
std::string showFamtree()
{
std::stringstream ss;
ss << "Name: " << you << endl;
ss << "Mother's name: " << urmom <<endl;
ss << "Father's name: " << urdad <<endl;
return (ss.str());
}
我也經常添加標簽。 所以考慮使用
std::string showFamtree(std::string label)
{
std::stringstream ss;
ss << label;
ss << "Name: " << you << endl;
ss << "Mother's name: " << urmom <<endl;
ss << "Father's name: " << urdad <<endl;
return (ss.str());
}
並將調用更改為
cout << tree.showFamtree("Family tree: ") << endl;
注意-也許標簽應該在自己的行上,以便在“樹”的左側保持一致的空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.