c ++, печать данных любого типа (шаблон T) на консоль

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

0
задан Amir-Mousavi 15 January 2019 в 09:51
поделиться

1 ответ

Проблема в том, что вы вызываете 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;

Более подробную информацию можно найти здесь: [ 1112] https://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/

Оператор C2593 < < является неоднозначным

У вас есть 2 или более реализаций, которые оба являются кандидатами, и компилятор не знает, какую из них выбрать. Сообщение об ошибке содержит дополнительные сведения, которые указывают на кандидатов, чтобы вы могли увидеть, какие типы конфликтов. Подробнее здесь: ошибка C2593: 'оператор < <' является неоднозначным

C2679 бинарный < < не найден оператор, который принимает правый операнд типа T (или нет приемлемого преобразования)

Вы вызываете operator<< для типа, который не перегружает его, как описано в начало моего ответа.

0
ответ дан Zdeslav Vojkovic 15 January 2019 в 09:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: