我們有一個自定義的Logging類,它在VisualStudio 2010中編譯得很好,但在Linux上用g ++編譯時會拋出錯誤。我們收到錯誤消息如下:g ++「operator <<」聲明爲非函數「
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
);任何線索爲什麼?
感謝, 本
在這裏做什麼$符號? –
對不起,複製並粘貼錯誤,現在修復。 – Ben
以下劃線後跟大寫字母開頭的名稱保留用於實現特定的細節,因此'std :: _ Smanip'可能是VS特定的。 – hammar