这是我唯一能想到的.事情很有感觉.
我有一个结构如下:
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)
有两个主要问题.
首先,wchar_t写一个字符串文字L"blah blah"(注意L).
第二,const正确性:声明你的正式论点wchar_t const* pFirst.这允许直接使用文字作为实际参数.或任何const字符串.
干杯&hth.,