今天使用何渝写的《计算机常用数值算法与程序》中的配套代码的时候,发现在自己程序中include <valarray>头文件的时候会出现奇怪的error: Microsoft Visual Studio .NET 2003Vc7includevalarray(321): error C2059: syntax error : ')'。
环境:windowsXP+vc.net 2003
使用 何渝 编著的《计算机常用数值算法与程序》(C++版) 人民邮电出版社 中的源代码
因其里面包含了头文件valarray:
#include <valarray>
using namespace std;
使用vc6编译时没有错误,但是在使用vc.net2003编译时碰到如下等一系列的错误:
error C2059: 语法错误 : “)” 参见对正在编译的类模板实例化“std::valarray<_Ty>”的引用
error C2334: “:”的前面有意外标记;跳过明显的函数体
error C2143: 语法错误 : 缺少“)”(在“}”的前面)
error C2238: 意外的标记位于“;”之前
error C2146: 语法错误 : 缺少“;”(在标识符“_Ty”的前面)
……………………
……………………
上网查了查,有人说这是vc.net的一个bug;
也有人说这是 MFC<valarray>有冲突,一加入#include <valarray>就会报和上面相似的错误;
有人建议如下:”.net我没有使用过,但是我想你用的是中文版吧,有时有可能是汉化时出了问题的,我用vc6。0中文版时,有时也出现许多恶心的问题,但是用英文版就基本上没有什么问题的。 像编译器之类的还是用英文版的比较好的。“
还是有些高人给出了解决办法:
1)在包含头文件valarray时使用下面的格式
#undef min
#undef max
include <valarray>
using namespace std;
2) 如果要保留min,max宏,前后夹击
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
#include <valarray>
using namespace std;
#pragma pop_macro("min")
#pragma pop_macro("max")
本人试了试,果然有效。