Как уже указывал Дэвид, для строк уже есть operator<<
, поэтому вам не нужно его указывать.Если вы действительно хотите определить свою собственную перегрузку в любом случае, тогда есть небольшая проблема, потому что на самом деле вам не разрешено это делать.operator<<
определено в пространстве имен std
, поэтому, если вы хотите использовать полезную перегрузку для std::string
(версия в большинстве реализаций является функцией шаблона, поэтому является потенциальной перегрузкой),вам придется делать это и в пространстве имен std
(из-за того, что неоднозначности и перегрузки разрешаются в C ++, здесь есть несколько предостережений).Например:
namespace std {
ostream& operator<< (ostream& out,const string & str)
{
out << "A STRINGY:" << str.c_str();
return out;
}
}
Однако добавление содержимого в пространство имен std
недопустимо для обычных пользователей, поскольку оно может иметь специфические для реализации эффекты, которые непредсказуемы и могут нарушить все виды содержимого в стандартной библиотеке,Также нет гарантии, что ваша реализация стандартной библиотеки имеет перегружаемый оператор <<.Это означает, что это может работать или не может.</p>