我有一段带有 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与包含它的代码位于同一目录中。