gpt4 book ai didi

c++ - 如何在结构中重载流

转载 作者:行者123 更新时间:2023-11-28 00:19:24 26 4
gpt4 key购买 nike

我有一个命名空间需要重载 ostream 进行编译,当我在结构中添加时,它提示有两个参数,只允许一个参数,当我在结构之后添加时,仍然无法编译:

namespace ORT {

struct MimeType {
MimeType(const std::string & type = "")
: type(type)
{
}
std::string toString() const { return std::string(type); }
std::string type;
};
std::ostream& operator<< (std::ostream& stream, const MimeType& mt) {
std::cout << mt.type;
return stream;
}
...

它说:在功能ORT::operator<<(std::basic_ostream<char, std::char_traits<char> >&, ORT::MimeType const&)':
/ort.h:56: multiple definition of
ORT::operator<<(std::basic_ostream >&, ORT::MimeType const&)'collect2: ld 返回 1 退出状态make: *** [build/x86_64/bin/libopenrtb.3da2981d03414ced8d640e67111278c1.so] 错误 1

但我只包括ostream,没有多实例。当我只放:

它说:错误:“结构”之前的预期初始值设定项错误:预期 â}â 在输入结束时make: *** 错误 1

最佳答案

发生这种情况是因为您在头文件中定义了一个未标记为 inline 的函数.要么移动 operator << 的定义到相应的 .cpp 文件,或添加 inline关键词:

inline std::ostream& operator<< // ...

我个人会将其移至 .cpp 文件。然后你可以移动#include <iostream>在 .cpp 文件的标题中,添加 #include <iosfwd>到你的标题,这是一个更 slim 的依赖。

关于c++ - 如何在结构中重载流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28312029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com