Possible Duplicate:
std::endl is of unknown type when overloading operator<<
Operator overloadingC++ chaining của toán tử << cho std :: cout như sử dụng
Tôi hiện đang lập trình một lớp logger, nhưng phương pháp operator<<
gây ra một lỗi biên dịch. Dưới đây là một phiên bản thu nhỏ của lớp, trong tập tin "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;
};
Nó được bao gồm trong main.cpp tôi và các công trình perfecly khi tôi ra một chuỗi chữ:
log << "hi";
Tuy nhiên, sau đây sẽ không biên dịch.
#include "logger.h"
int main() {
Logger log;
log << std::endl;
}
Các g ++ báo cáo trình biên dịch:
src/main.cpp:5: error: no match for 'operator<<' in 'log << std::endl'
"Ngoài ra, bạn có thể sử dụng '\ n' thay vì' endl'. " Không phải nếu OP muốn đảm bảo các bộ đệm đầu ra được xóa, như tôi [đã học gần đây] (http://stackoverflow.com/q/8311058/440558). –
Phải, tôi sẽ thêm nó vào câu trả lời của tôi. – fefe
Cảm ơn bạn, nó hoạt động :) – Tuxer