C++ 编译符号cc++;-运算符,不明确

C++ 编译符号cc++;-运算符,不明确,c++,visual-c++-2010,C++,Visual C++ 2010,我试图在VC++2010 Express中编译SymbolicC++库(发行版中有特殊的VS project),但是它在系统头中给出了很多错误,与操作符相关,。例如: 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xlocmon(410):错误C2593:“运算符”不明确 对于系统标题中的此代码: if (_Str[0] < _E0 || _E0 + 9 < _Str[0]) _Str2 += '-',

我试图在VC++2010 Express中编译SymbolicC++库(发行版中有特殊的VS project),但是它在系统头中给出了很多错误,与
操作符相关,
。例如:

1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xlocmon(410):错误C2593:“运算符”不明确

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

if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
    _Str2 += '-', ++_Off;
if(_Str[0]<_E0 | | _E0+9<_Str[0])
_Str2+='-',++_关闭;

为什么??如何编译?

如有疑问,请添加括号:

    if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
        (_Str2 += '-'), ++_Off;
if(_Str[0]<_E0 | | _E0+9<_Str[0])
(_Str2+='-'),++_关闭;

或者简单地编写适当的C++代码:

    if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
    {
        _Str2 += '-';
        ++_Off;
    }
if(_Str[0]<_E0 | | _E0+9<_Str[0])
{
_Str2+='-';
++_关;
}

显然,SymbolicCC++重载了
操作符,
的方式使下游包含受到了影响

您应该重新排列您的包含项,使SymbolicC++的包含项排在最后:

#include <iostream>
#include <vector>

// don't want to monkey with our other headers
#include "symbolicc++.h"
#包括
#包括
//我不想和我们的其他头头鬼混
#包括“C++.h”

这并不是说
标题中的代码没有可疑,那种对逗号运算符的滥用是在自找麻烦。

我们不知道他们的
运算符
在做什么,所以这很可能是无效的,但这是一种奇怪的方式——以下是等效的,也不那么奇怪:

    if (_Str[0] < _E0 || _E0 + 9 < _Str[0]) {
        _Str2 += '-';
        ++_Off;
    }
if(_Str[0]<_E0 | | _E0+9<_Str[0]){
_Str2+='-';
++_关;
}

逗号运算符在90%的情况下没有任何意义。解决方法是用钝物击中编写代码的人的头部,然后将其改写为:

if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
{
  _Off++;
  _Str2 += '-';
}
if(_Str[0]<_E0 | | _E0+9<_Str[0])
{
_Off++;
_Str2+='-';
}

这里有另一种解决方法,可以避免修改

的依赖关系是通过
verylong.h
实现的,它包括
,而
又包括
。在
verylong.h
中,注释掉以下行:

#include <iomanip>
#包括

< P>这样,构建在我的系统上成功完成(Windows 7,Visual C++ 2010 Express)。< /P>尝试将该<代码>、<代码>改为<代码>;代码>。使用
来避免编写
{}
块的错误做法。@vulkanino,我们都会时不时地这样做,不是吗:)@Blindy:ehm,不。老实说,我从来没有做过,也没有考虑过。在试图滥用
之前,我会用
{}
包装一条语句。你能告诉我们你的
包含
顺序吗?很有趣,然后SymbolicC++滥用了逗号运算符,导致下游include呕吐。基本上,您需要注意确保
SymbolicC++.h
不会在任何系统头文件之前被包含。@RankoR:学会根据内容而不是根据徽章来判断;)@六个变量,我们能让你真正构建SymbolicC++库吗?我遇到了同样的问题,但不确定要重新排序哪些标题。文件
verylong.h
包括
,而
又包括
。问题在于
symbolicc++.h
包含
verylong.h
,之后又包含
symbolicc++.h
3次。这样看来,重新排序标题是非常棘手的,但它不会触发歧义错误。尽管我不想编辑系统标题<代码> <代码>,但该解决方案确实有效,并且符号C++ 3.35为我成功构建(Visual C++ 2010 Express)。有关获取符号C++在VisualC++ 2010 Express中运行的详细说明,请参见答案。