Возможный дубликат:
std :: endl неизвестного типа при перегрузке оператора <<
Перегрузка оператора
В настоящее время я программирую класс журнала, но метод operator<<
вызывает ошибку компилятора. Здесь свернутая версия класса, в файле "logger.h":
#include <iostream>
class Logger {
public:
Logger() : m_file(std::cout) {}
template <typename T>
Logger &operator<<(const T &a) {
m_file<<a;
return *this;
}
protected:
std::ostream& m_file;
};
Он включен в мой main.cpp и отлично работает, когда я выводим строковый литерал:
log << "hi";
Однако следующее не будет компилироваться.
#include "logger.h"
int main() {
Logger log;
log << std::endl;
}
Компилятор g++ сообщает:
src/main.cpp: 5: ошибка: нет соответствия для "operator <<" в "log << std :: endl '