为什么将我的打印方法与std::cout一起使用会导致错误

Why does using my print method with std::cout result in an error?

本文关键字:错误 一起 cout 打印 我的 方法 为什么 std      更新时间:2023-10-16
#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;

注意-也许标签应该在自己的行上,以便在"树"的左侧保持一致的空白。

相关文章: