编译SymbolicC ++ - 运算符,是不明确的

时间:2012-03-08 15:05:45

标签: c++ visual-c++-2010

我正在尝试在VC ++ 2010 Express中编译SymbolicC ++库(在发行版中有特殊的VS项目),但它在系统头中产生了很多错误,与{{1相关}}。例如:

  

1> C:\ Program Files \ Microsoft Visual Studio   10.0 \ VC \ include \ xlocmon(410):错误C2593:'运算符',含糊不清

对于系统标题中的此代码:

operator,

为什么呢?如何编译?

5 个答案:

答案 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 += '-';
}