Struct不接受wchar_t

IAE*_*IAE 1 c++ wchar-t

这是我唯一能想到的.事情很有感觉.

我有一个结构如下:

struct NumPair
{
    wchar_t *pFirst, *pSecond;
    int count;
Run Code Online (Sandbox Code Playgroud)

与ctor,副本分配和建设

NumPair( wchar_t *pfirst, wchar_t *psecond, int count = 0)
NumPair( const NumPair& np )
NumPair& operator=( const NumPair& np )
Run Code Online (Sandbox Code Playgroud)

这是我最后一个问题的扩展,我在这个问题中要求一种方法来对包含特殊(德语)字符的字符指针进行排序,例如ü, ä, ö.

解决方案似乎使用宽字符类型,但编译器由于某种原因抛出了一百多个转换错误.

样本输入:

// dict_ is a container of NumPairs.
dict_.push_back( NumPair ( "anfangen", "to begin, to start" ) );
Run Code Online (Sandbox Code Playgroud)

编译器抱怨它无法将a转换const char *为a wchar_t.很好,我改变push_back说

dict_.push_back( NumPair ( wchar_t("anfangen"), wchar_t("to begin, to start") ) );
Run Code Online (Sandbox Code Playgroud)

编译器错误:找不到接受所有参数的NumPair ctor.

什么.的.地狱.我尝试了完整的重建,认为我的VSC++ 10正在崩溃.不,猜不是.

我究竟做错了什么?

ctor,赋值和复制构造都是wchar_t指针的深层副本,如下所示.

wchar.h包括在内.

NumPair( wchar_t *pfirst, wchar_t *psecond, int count = 0)
    : count(count)
{
    size_t s1, s2;
    s1 = wcslen(pfirst);
    s2 = wcslen(psecond);
    pFirst  = new wchar_t[s1];
    pSecond = new wchar_t[s2];
    wcscpy(pFirst, pfirst);
    wcscpy(pSecond, psecond);
}
Run Code Online (Sandbox Code Playgroud)

Che*_*Alf 5

有两个主要问题.

首先,wchar_t写一个字符串文字L"blah blah"(注意L).

第二,const正确性:声明你的正式论点wchar_t const* pFirst.这允许直接使用文字作为实际参数.或任何const字符串.

干杯&hth.,