2010-03-24 99 views
0

我有真实用于打印出不同字符类型一个性状类:错误使用特性类:“之前‘&’令牌预期构造析构函数或类型转换”

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(克++)版本3.4。 5(是有点老)抛出一个错误: “之前的预期‘&’令牌构造析构函数或类型转换”

而且我知道如果有解决这个的好办法。

(它也生气_O_WTEXT所以如果有人得到了一些洞察到这一点,我也将不胜感激)

+0

您正在使用哪个平台?在非Windows平台上,'wchar_t'绝对不是'unsigned short'的同义词。当然,这不是对你面临的问题有任何影响。 :-P – 2010-03-24 20:50:07

+0

啊是的 - 我实际上使用Windows机器。我知道在其他体系结构中,wchar_t可能会有更多/更少的字节。 – Mark 2010-03-24 20:50:54

+0

这不是大小。这是关于类型身份。 – 2010-03-24 20:56:38

回答

1

wchar_t是不同的类型unsigned short。您必须使用

template<> 
std::wostream& traits<wchar_t>::tout = std::wcout; 

即使它们可能使用相同的表示形式,它们也是无用的不同的整数类型。很像三个char,signed charunsigned char

另外请确保您包含正确的标题(<ostream>或包括<iostream>)。

相关问题