我有一段带有 COM 类声明的代码,如下所示:
#include "PathTypes.h"
MIDL_INTERFACE("552C7555-0555-4444-BA86-56CF39AAFFFF")
IPathCalc : public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE GetLocation(
/* [retval][out] */ GeoLocation* pLoc) = 0;
virtual HRESULT STDMETHODCALLTYPE SetLocation(
/* [in] */ GeoLocation* pLoc) = 0;
...
};
以下是PathTypes.h
文件内容:
#if !defined(PATHCALC_TYPES_INCLUDED)
#define PATHCALC_TYPES_INCLUDED
#include "libastro/AstronomyStructs.h"
#endif
并且libastro/AstronomyStructs.h
来自外部跨平台库:
#ifndef _ASTRONOMY_STRUCTS_INCLUDED
#define _ASTRONOMY_STRUCTS_INCLUDED
typedef struct {
double lattitude;
double longitude;
} GeoLocation;
...
#endif /* _ASTRONOMY_STRUCTS_INCLUDED */
当我尝试用 g++ 构建这段代码时,一切都很顺利。这不是 MSVC 2003 返回错误 C2061: syntax error : identifier 'GeoLocation' 的情况。
似乎 MSVC 没有“看到”libastro/AstronomyStructs.h
文件中的定义。当我#include "PathTypes.h"
用#include "libastro/AstronomyStructs.h"
代码替换时编译没有错误。
如何让 MSVC 2003 真正“看到”嵌套包含文件中的定义?
更新1:
该文件PathTypes.h
与包含它的代码位于同一目录中。