C++ ostream operator<< "без определения" ошибка (только для Mac)
У меня есть код, который компилируется в 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 с отсутствующей библиотекой или, возможно, с другой версией компилятора. Я подумал, что, возможно, смогу исправить это, перегрузив оператор << самостоятельно, но пока мои попытки не сработали. Любая помощь будет оценена!
1 ответ
Я подумал, что я мог бы это исправить, перегрузив оператор << сам, но пока мои попытки не сработали
Пожалуйста, не делай этого. Что вам нужно, это исправить корневую проблему: почему перегрузка operator <<
невидимый?
Без некоторого контекста трудно точно сказать, в чем проблема, но я предполагаю, что вы явно не включаете все необходимые заголовки.
Убедитесь, что оба эти включения присутствуют:
#include <string>
#include <ostream> // or <iostream> if you need both input and output
Возможно, реализация стандартной библиотеки, которую вы используете при компиляции в Linux, импортирует <string>
заголовок из <ostream>
заголовок, или наоборот, поэтому включение только одного из этих двух заголовков оказывается достаточным.
Однако такое поведение не является обязательным для Стандарта, поэтому вы не можете на него полагаться. Всегда включайте все необходимые заголовки явно.