次のような 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++ でビルドしようとすると、すべてうまくいきます。これは、エラー C2061: syntax error : identifier 'GeoLocation'を返す MSVC 2003 には当てはまりません。
MSVC はlibastro/AstronomyStructs.h
ファイルの定義を「認識」していないようです。コードに置き換える#include "PathTypes.h"
と#include "libastro/AstronomyStructs.h"
、エラーなしでコンパイルされます。
MSVC 2003 でネストされたインクルード ファイルの定義を実際に「見る」にはどうすればよいですか?
更新 1:
ファイルPathTypes.h
は、それを含むコードと同じディレクトリにあります。