C ++ ostream运算符<< “无定义”错误(仅限Mac版本)

时间:2013-06-14 14:16:20

标签: c++ macos ostream

我有一些代码可以在Linux上编译,但无法在我的Mac上编译。我正在使用gcc-4.2.1进行编译。有问题的代码是C ++,它看起来像这样:

void print(std::ostream& os) const { os << std::string(*this) << " "; }

错误是:

error: explicit instantiation of Œstd::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&, const
std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits
= std::char_traits<char>, _Alloc = std::allocator<char>]¹ but no
definition available

我知道代码有效,因为它在Linux上编译得很好。我无法判断Mac错误是由于缺少库还是可能是不同的编译器版本。我想也许我可以通过重载&lt;&lt;来解决它。操作员自己,但到目前为止,我的尝试没有奏效。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

  

我想也许我可以通过重载&lt;&lt;来解决这个问题。操作员自己,但到目前为止,我的尝试没有奏效

请不要那样做。你需要的是修复根问题:为什么operator <<的重载不可见?

如果没有某些上下文,很难确切地说出问题所在,但我的猜测是你没有明确地包含所有必需的标题。

确保这两个包括在内:

#include <string>
#include <ostream> // or <iostream> if you need both input and output

在Linux上进行编译时,您使用的标准库的实现可能会从<string>标头导入<ostream>标头,反之亦然,因此只包括这两个标头中的一个原来是足够的。

但是,标准并未规定此行为,因此您不能依赖它。始终明确包含所有必需的标题。