为什么将我的打印方法与std::cout一起使用会导致错误
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;
注意-也许标签应该在自己的行上,以便在"树"的左侧保持一致的空白。
相关文章:
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 与clang++一起使用的VS代码在构建良好的C++文件中显示错误
- MSVC __debugbreak() 与 openGL 错误回调一起使用时不会产生调用堆栈
- boost::interprocess::file_lock 与 std::ostream 一起使用时的错误行为
- 为什么使用与父级声明的 std::function 在与子级一起使用时会显示错误?
- 将 std::variant 与 gmock 1.8 对象一起使用时编译错误
- 为什么当我尝试将priority_queue与参数一起使用作为指向结构的指针时会弹出错误
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 与unordered_map向量一起使用的最小示例中的scoped_allocator_adaptor错误
- 将 int 与字符串和 getline 一起使用,没有错误
- Intelmpi错误(与OpenMPI一起使用)
- 在 c++ 中将模板与类一起使用时,类成员函数的答案错误?
- 在将QT与Cmake一起使用时解决链接错误
- 尝试将Winelib与标准macOS构建工具一起使用:得到奇怪的编译器错误
- 与类一起使用时 std::reference_wrapper "has no member named" 编译错误
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 使用C和C 一起使用函数错误的不确定引用
- 将shared_ptr与指向指针的指针一起使用时出现编译器错误
- 将RGBA32F纹理与帧缓冲抛出INVALID_ENUM错误一起使用