C++ 编译符号cc++;-运算符,不明确
我试图在VC++2010 Express中编译SymbolicC++库(发行版中有特殊的VS project),但是它在系统头中给出了很多错误,与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 += '-',
操作符相关,
。例如:
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中运行的详细说明,请参见答案。