MSVC 2003 看不到嵌套包含文件中的任何定义

MSVC 2003 doesn't see any definitions from a nested include file

本文关键字:任何 定义 文件 包含 2003 看不到 嵌套 MSVC      更新时间:2023-10-16

我有一个带有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:语法错误:标识符'Geolocation'

似乎MSVC没有"查看" libastro/AstronomyStructs.h文件中的定义。当我用#include "libastro/AstronomyStructs.h"替换#include "PathTypes.h"时,代码没有错误。

如何使MSVC 2003实际"查看"嵌套的定义包括文件?

更新1:

文件PathTypes.h与包含IT的代码的目录处于同一目录。

如何使MSVC 2003实际"查看"嵌套的定义包括文件?

应该这样做 - 我的猜测是从其他地方读取"PathTypes.h"(您的系统上有多个版本吗?)。或者可能是圆形的情况,但是您无法从发布的代码中分辨出来。正如是,它应该起作用。

注意:宏_ASTRONOMY_STRUCTS_INCLUDED是非法的,删除领先的下划线。

另外,请注意,在这种情况下,您不需要整个定义,向前陈述就足够了:

class GeoLocation; //forward-declaration
IPathCalc : public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE GetLocation(
    /* [retval][out] */ GeoLocation* pLoc) = 0;
virtual HRESULT STDMETHODCALLTYPE SetLocation(
    /* [in] */ GeoLocation* pLoc) = 0;
...
};
相关文章: