错误C2196:大小写值'?已经使用
Error C2196: case value '?' already used
Ok,在代码中使用Visual Studio Ultimate 2012(可能是ANSI, unicode等问题)构建时出现奇怪的错误…
switch (input[index])
{
case 'א': // Alef Hebrew character
if (/*conditional*/)
{
// Do stuff.
}
break;
case 'ב': // Beth Hebrew character
if (/*conditional*/)
{
//Do stuff
}
break;
default:
{
//Do some other stuff.
}
break;
}
第二个case参数生成…
Error C2196: case value '?' already used
假设input
是wchar_t
s的数组,您的问题是您正在比较宽字符和窄字符字面量。
正如peter在评论中所说:
如果您将文件保存为utf-8编码,则
א
是0xD790
,ב
是0xD791
,因此,如果input[index]
是char类型,则两者都将尝试匹配0xD7
。
这就是为什么你会得到你提到的错误。(char
有足够的空间存储ASCII值,其余部分省略)
您可以通过在字面量前加上大写的L
(将它们变成宽字符)来解决这个问题。
case L'א': // Alef Hebrew character
if (/*conditional*/)
{
// Do stuff.
}
break;
case L'ב': // Beth Hebrew character
if (/*conditional*/)
{
//Do stuff
}
break;
另外,你需要确保你的源文件是用unicode编码&你的编译器知道如何处理它。
或者,您可以像这样简单地转义unicode值:
case L'u05D0': // Aleph Hebrew character
// ...
case L'u05D1': // Beth Hebrew character
C(和c++)在unicode处理方面是出了名的糟糕。问题是,你试图适应一些希伯来字符到char
。但是一个char(单个字节)的宽度只够ASCII。
如果您使用的是现代(至少是c++ 11)版本的c++,请遵循此答案。
如果您使用的是C语言,您可能希望使用IBM的ICU库。
'א'
字符不能放入字符中。通常需要几个字节,所以'א'
构成了一个"多字符字面量",就像'ab'
一样(注意:使用单引号)。
"多字符文字"的类型为int,值由实现定义。而且,不同的多字符字面值可能具有相同的值,因为有无限多个多字符字面值。
在您的情况下,显然您的编译器将'א'
和'ב'
视为'?'
,因此它会发出错误,因为相同的值('?'
)在同一个switch
中出现在case
标签之后两次。
假设您使用的是wchar_t
,那么Ivan已经给出了修复。
如果您正在使用char
,那么א
是一个多字符串而不是字符。您可以使用比较字符串的函数来检查א
是否出现在input
的某个index
:
const int ONE = 1;
if (strncmp(input+index, "א", sizeof("א") - ONE) == 0) {
// Alef Hebrew character
if (/*conditional*/)
{
// Do stuff.
}
} else if (strncmp(input+index, "ב", sizeof("ב") - ONE) == 0) {
// Beth Hebrew character
if (/*conditional*/)
{
//Do stuff
}
} else {
// default:
// Do
}
- 切换大小写后如何阻止变量重置?
- 无法找到简单的开关大小写枚举错误
- 仿射密码解密,输出大小写不同
- 编写宏函数来更改字符串的大小写?
- 使字母检查不区分大小写
- 如何执行不区分大小写的字符串比较?
- 函数中的切换大小写语句不会切换C++
- CMake 添加不区分大小写的源文件
- 如何在不同的开关大小写语句上使用对象的类成员函数?
- 如何以 if else 或切换大小写格式对自动和编码?
- 有没有一种方法可以忽略Qt c++中的文件名大小写敏感性?
- 标题与标准标题具有相同名称但大小写不同的问题
- Rand()大小写开关在多次迭代后运行到无穷大
- 在这种情况下,如何在基类中设计开关大小写函数
- 提升program_option配置文件的不区分大小写的解析
- 复数大小写中的C++运算符 ->
- 如何提升Perl正则表达式匹配,支持区分大小写/不区分大小写
- 无法在开关大小写中调用函数 - C++
- 对字符串向量进行排序,但不区分大小写
- 错误C2196:大小写值'?已经使用