我正在尝试在VC ++ 2010 Express中编译SymbolicC ++库(在发行版中有特殊的VS项目),但它在系统头中产生了很多错误,与{{1相关}}。例如:
1> C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include \ xlocmon(410):错误C2593:'运算符',含糊不清
对于系统标题中的此代码:
operator,
为什么呢?如何编译?
答案 0 :(得分:5)
显然,SymbolicC ++已经过载operator,
,导致下游包含受到影响。
你应该重新排序你的包含,以便SymbolicC ++的包含在最后:
#include <iostream>
#include <vector>
// don't want to monkey with our other headers
#include "symbolicc++.h"
这并不是说<xlocmon>
标题中的代码不可疑,逗号运算符的那种 abuse 使用方法就是在麻烦。
答案 1 :(得分:2)
如有疑问,请添加括号:
if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
(_Str2 += '-'), ++_Off;
或者只是编写适当的C ++代码:
if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
{
_Str2 += '-';
++_Off;
}
答案 2 :(得分:2)
这是另一种避免必须修改<xlocmon>
的解决方法。
对<xlocmon>
的依赖是verylong.h
,其中包含<iomanip>
,<xlocmon>
又包含verylong.h
。在#include <iomanip>
中,注释掉该行:
{{1}}
执行此操作后,构建在我的系统上成功完成(Windows 7,Visual C ++ 2010 Express)。
答案 3 :(得分:0)
我们不知道他们的operator,
正在做什么,所以这可能无效,但这是一种奇怪的做事方式 - 以下是等同的,不那么奇怪:
if (_Str[0] < _E0 || _E0 + 9 < _Str[0]) {
_Str2 += '-';
++_Off;
}
答案 4 :(得分:0)
在90%的情况下,逗号运算符没有任何意义。解决办法就是用一个钝器写入头部编写代码的人,然后将其重写为:
if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
{
_Off++;
_Str2 += '-';
}