vc 7.1中使用valarray时的技巧


今天使用何渝写的《计算机常用数值算法与程序》中的配套代码的时候,发现在自己程序中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")

本人试了试,果然有效。

原文地址:https://www.cnblogs.com/hzcya1995/p/13318747.html