У нас есть собственный класс Logging, который прекрасно компилируется в VisualStudio 2010, но выдает ошибки при компиляции с g ++ в Linux.Мы получаем следующее сообщение об ошибке:
Logger.hpp:84: error: declaration of "operator<<" as non-function
Logger.hpp:84: error: expected ";" before "(" token
Logger.hpp:91: error: expected ";" before "inline"
Logger.hpp:91: error: declaration of "operator<<" as non-function
Logger.hpp:91: error: expected ";" before "(" token
Logger.hpp:98: error: expected ";" before "typedef"
Соответствующие строки кода следующие:
/*:84*/inline Logger& operator<<(std::_Smanip<std::ios_base::fmtflags> output)
{
if (this->loggingEnabled())
std::cout << output;
return *this;
}
inline Logger& operator<<(std::_Smanip<std::streamsize> output)
{
if (this->loggingEnabled())
std::cout << output;
return *this;
}
typedef std::basic_ostream<char, std::char_traits<char> >& (*StdEndl)(std::basic_ostream<char, std::char_traits<char> >&);
inline Logger& operator<<(StdEndl output)
{
if (this->loggingEnabled())
std::cout << output;
return *this;
}
Другие методы, перегружающие оператор <<
, работают нормально, поэтому я думаю,в том, что ошибки имеют отношение к типу аргумента (std::_Smanip
);какие-либо подсказки, почему?
Спасибо, Бен