我有以下代碼正在使用Visual C++ 10,但不是在Linux GCC:GCC:模板預先定義的錯誤
class basic_format
{
...
basic_format() : str_(), fmt_() {}
...
template <class ValueT>
basic_format& operator%(const ValueT& x)
{
...
}
template <class Ch, class Tr>
friend std::basic_ostream<Ch, Tr>& operator<<(
std::basic_ostream<Ch, Tr>& sout, const basic_format<Ch, Tr>& f)
{
...
}
...
}
用途:
query << basic_format<char_type>("%s %s HTTP/%.1f\r\n") % method % path % this->version();
編譯器破口大罵:
Multiple markers at this line
- ‘template<class Ch, class Tr> std::basic_ostream<_CharT, _Traits>& clx::operator<<(std::basic_ostream<_CharT, _Traits>&, const clx::basic_format<Ch,
Tr>&)’ previously defined here
- redefinition of ‘template<class Ch, class Tr> std::basic_ostream<_CharT, _Traits>& clx::operator<<(std::basic_ostream<_CharT, _Traits>&, const
clx::basic_format<Ch, Tr>&)’
我正在使用GCC 4.4.7 我可以在GCC上做些什麼來避免這個錯誤嗎?
詳細解釋你想做什麼。運營商的聲明在哪裏,在其他類別內部?這段代碼的目的是 - 與一些現有的操作員朋友或者定義新的朋友操作員或者替換現有的操作員? – user2807083
@ user2807083這兩個定義在同一個類中。我使用這兩個模板格式化HTTP請求,如問題中所示。 – cristian