Проблема в том, что вы вызываете operator<<
для типов, которые не перегружают тот оператор, который вы затем вызываете внутри вашей sharedLog
функции.
Для записи экземпляра типа T
в std::ostream
таким образом, вам необходимо перегрузить operator<<
.
Оператор должен быть реализован вне типа T
и иметь следующую подпись:
std::ostream& operator<< (std::ostream &out, const T& arg);
Если ему нужен доступ к закрытым и защищенным членам T
, он также должен быть объявлен как друг:
friend std::ostream& operator<< (std::ostream &out, const T& arg);
Он должен возвращать ссылку out
, которую он получает в качестве первых аргументов, чтобы можно было объединять вызовы:
str << a << b << c;
Более подробную информацию вы можете найти здесь: https://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/
C2593 оператор << неоднозначен </p>
У вас есть 2 или более реализаций, которые оба являются кандидатами, и компилятор не знает, какую из них выбрать. Сообщение об ошибке содержит дополнительные сведения, которые указывают на кандидатов, чтобы вы могли увидеть, какие типы конфликтов. См. Здесь: ошибка C2593: «оператор <<» является неоднозначным </a>
C2679 двоичный << оператор не найден, который принимает правый операнд типа T (или нет приемлемого преобразования) </p>
Вы звоните operator<<
для типа, который не перегружает его, как описано в начале моего ответа.