我有一个traits类,用于打印不同的字符类型:
template <typename T>
class traits {
public:
static std::basic_ostream<T>& tout;
};
template<>
std::ostream& traits<char>::tout = std::cout;
template<>
std::wostream& traits<unsigned short>::tout = std::wcout;
gcc(g ++)版本3.4.5(有点旧)抛出一个错误: “预期构造函数析构函数或'&amp;'之前的类型转换标记“
我想知道是否有一个很好的解决方法。
(它也对_O_WTEXT感到愤怒,所以如果有人对此有所了解,我也会很感激)
答案 0 :(得分:1)
wchar_t
与unsigned short
的类型不同。你必须使用
template<>
std::wostream& traits<wchar_t>::tout = std::wcout;
尽管它们可能使用相同的表示,但它们仍然是不同的整数类型。与char
,signed char
和unsigned char
中的三个非常相似。
还要确保包含正确的标题(<ostream>
或包含<iostream>
)。