为什么会出现错误 C3851(通用字符名称不能指定基本字符集中的字符)?
Why do I get error C3851 (a universal-character-name cannot designate a character in the basic character set)?
我一直在尝试将 an example whitespace remover 从这里翻译成 C++-cli 项目中的 运行。就智能感知而言,以下内容看起来不错:
static String^ TrimAllWithInplaceCharArray(String^ str)
{
unsigned int len = str->Length;
array<wchar_t, 1>^ src = str->ToCharArray();
int dstIdx = 0;
for (unsigned int i = 0; i < len; i++) {
wchar_t ch = src[i];
switch (ch) {
case L'\u0020': case L'\u00A0': case L'\u1680': case L'\u2000': case L'\u2001':
case L'\u2002': case L'\u2003': case L'\u2004': case L'\u2005': case L'\u2006':
case L'\u2007': case L'\u2008': case L'\u2009': case L'\u200A': case L'\u202F':
case L'\u205F': case L'\u3000': case L'\u2028': case L'\u2029': case L'\u0009':
case L'\u000A': case L'\u000B': case L'\u000C': case L'\u000D': case L'\u0085':
continue;
default:
src[dstIdx++] = ch;
break;
}
}
return gcnew String(src, 0, dstIdx);
}
...但不编译:
error C3851 : '\u0020' : a universal - character - name cannot designate a character in the basic character set
error C3850 : '\u0009' : a universal - character - name specifies an invalid character
error C3850 : '\u000A' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u000B' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u000C' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u000D' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u0085' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
我是否以某种方式错误地表示数据类型或文字值?
看看以下是否有效...
static String^ TrimAllWithInplaceCharArray(String^ str)
{
unsigned int len = str->Length;
array<wchar_t, 1>^ src = str->ToCharArray();
int dstIdx = 0;
for (unsigned int i = 0; i < len; i++) {
wchar_t ch = src[i];
switch (ch) {
case L'\x20': case L'\xA0': case L'\u1680': case L'\u2000': case L'\u2001':
case L'\u2002': case L'\u2003': case L'\u2004': case L'\u2005': case L'\u2006':
case L'\u2007': case L'\u2008': case L'\u2009': case L'\u200A': case L'\u202F':
case L'\u205F': case L'\u3000': case L'\u2028': case L'\u2029': case L'\x09':
case L'\x0A': case L'\x0B': case L'\x0C': case L'\x0D': case L'\x85':
continue;
default:
src[dstIdx++] = ch;
break;
}
}
return gcnew String(src, 0, dstIdx);
}
找到这个 here...
"You cannot use - u0022 because you cannot use a
universal character name that designates a character in the basic
character set."
我一直在尝试将 an example whitespace remover 从这里翻译成 C++-cli 项目中的 运行。就智能感知而言,以下内容看起来不错:
static String^ TrimAllWithInplaceCharArray(String^ str)
{
unsigned int len = str->Length;
array<wchar_t, 1>^ src = str->ToCharArray();
int dstIdx = 0;
for (unsigned int i = 0; i < len; i++) {
wchar_t ch = src[i];
switch (ch) {
case L'\u0020': case L'\u00A0': case L'\u1680': case L'\u2000': case L'\u2001':
case L'\u2002': case L'\u2003': case L'\u2004': case L'\u2005': case L'\u2006':
case L'\u2007': case L'\u2008': case L'\u2009': case L'\u200A': case L'\u202F':
case L'\u205F': case L'\u3000': case L'\u2028': case L'\u2029': case L'\u0009':
case L'\u000A': case L'\u000B': case L'\u000C': case L'\u000D': case L'\u0085':
continue;
default:
src[dstIdx++] = ch;
break;
}
}
return gcnew String(src, 0, dstIdx);
}
...但不编译:
error C3851 : '\u0020' : a universal - character - name cannot designate a character in the basic character set
error C3850 : '\u0009' : a universal - character - name specifies an invalid character
error C3850 : '\u000A' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u000B' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u000C' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u000D' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
error C3850 : '\u0085' : a universal - character - name specifies an invalid character
error C2196 : case value '63' already used
我是否以某种方式错误地表示数据类型或文字值?
看看以下是否有效...
static String^ TrimAllWithInplaceCharArray(String^ str)
{
unsigned int len = str->Length;
array<wchar_t, 1>^ src = str->ToCharArray();
int dstIdx = 0;
for (unsigned int i = 0; i < len; i++) {
wchar_t ch = src[i];
switch (ch) {
case L'\x20': case L'\xA0': case L'\u1680': case L'\u2000': case L'\u2001':
case L'\u2002': case L'\u2003': case L'\u2004': case L'\u2005': case L'\u2006':
case L'\u2007': case L'\u2008': case L'\u2009': case L'\u200A': case L'\u202F':
case L'\u205F': case L'\u3000': case L'\u2028': case L'\u2029': case L'\x09':
case L'\x0A': case L'\x0B': case L'\x0C': case L'\x0D': case L'\x85':
continue;
default:
src[dstIdx++] = ch;
break;
}
}
return gcnew String(src, 0, dstIdx);
}
找到这个 here...
"You cannot use - u0022 because you cannot use a universal character name that designates a character in the basic character set."