Ông có thể vui lòng giúp tôi với việc tìm kiếm một vấn đề trong đoạn mã sau (mã tương tự như C++ stream as a parameter when overloading operator<<):"lỗi: không phù hợp cho 'operator <<" khi làm việc với std :: string
#include <iostream>
#include <string>
class logger
{
public:
void init(std::ostream& ostr)
{
stream = &ostr;
}
template< typename t >
logger& operator <<(t& data)
{
*stream << data;
return *this;
}
logger& operator <<(std::ostream& (*manip)(std::ostream &))
{
manip(*stream);
return *this;
}
logger& operator <<(std::ios_base& (*manip)(std::ios_base&))
{
manip(*stream);
return *this;
}
private:
std::ostream* stream;
};
int main(int argc, char* argv[])
{
logger log;
log.init(std::cout);
log << "Hello" << std::endl;
//log << std::string("world") << std::endl;
return 0;
}
Mọi thứ hoạt động tốt cho đến khi tôi bỏ ghi chú dòng chứa "thế giới". Trong trường hợp này, GCC tạo ra lỗi : không khớp với 'toán tử < < ’trong ...
Điều thú vị là VS2008 không có vấn đề với mã này.
Cảm ơn bạn!
Visual studio thực hiện rất nhiều loại chuyển đổi mà các trình biên dịch khác sẽ không thực hiện. Hãy thử std :: string ("world") .c_str(); – steveg89