在Windows XP上使用Visual Studio 2005进行编译。我将以下标题添加到我的“stdafx.h”文件中,如下所示:
#include <atlbase.h>
#include <atlcom.h>
#include <atlcore.h>
#include <atlstr.h>
(从技术上讲,只包含atlbase.h会出现相同的错误)会产生以下错误:
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
error C2062: type 'double' unexpected
在以下代码中:
struct CheckValue : public unary_function<pair<MetID,double>,void>{
CheckValue(double _expected) : m_Expected(_expected){}
inline void operator()(const pair<MetID,double> &_val){
m_CheckList.push_back( near( _val.second ) ? 0 : 1 );
}
inline bool near(double _val){ //here is location of both errors
return ( m_Expected - m_Epsilon < _val ) || ( _val < m_Expected + m_Epsilon );
}
const static double m_Epsilon;
const double m_Expected;
list<int> m_CheckList;
};
const double CheckValue::m_Epsilon = 0.00001;
没有添加这些行,没有问题。有人想冒险猜测为什么?我在这里摸不着头脑,如果没有这些包含文件,就无法继续编写单元测试。
答案 0 :(得分:3)
通过预处理器运行它,看看你得到了什么。也许接近定义的东西,或某些问题。 (很难说没有行号)
(我相信/ E或/ EP是正确的开关,但您也可以在单个文件的VS GUI选项中找到它。)
答案 1 :(得分:2)
near
是WinDef.h
中定义的宏。当您包含ATL标头时,它们可能间接包含WinDef.h
。因此错误。
如果您确实需要这些标头,请在包含所有标头后立即停止使用标识符near
或#undef
。
答案 2 :(得分:0)
包含的顺序有时会导致奇怪的事情发生,事实上,VC ++过去曾发生过这样的“已知错误”。尝试改组包围,看它是否有帮助。