MSVC 2003 看不到嵌套包含文件中的任何定义
MSVC 2003 doesn't see any definitions from a nested include file
我有一个带有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;
...
};
相关文章:
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 为自定义打印调试实现传递任何类型的变量
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 标准库中的任何正则表达式语法是否支持 (?(定义)用于子模式参考?
- 是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 如何创建我稍后在代码中定义大小的任何数组?
- 是否有任何快捷键可以插入函数的定义
- 是否有任何可能的方法将事件(自定义)附加到在运行时创建的对象?[C 构建器]
- Qt:"closeEvent"的外线定义与"MainWindow"中的任何声明都不匹配
- 如何确保 "<<" 运算符适用于模板化 ADT 定义中的任何泛型类型?
- 如何定义一个从任何编码空间解析单个字符的精神 x3 解析器?
- 为什么重载运算符上的异常说明符'<<'不适用于任何 std::ostream 对象,但对库中定义的运算符不起作用?
- 自定义 OpenGL 缓冲区类不显示任何内容
- 将使用预处理器指令来定义美元符号表示的内容会导致任何冲突
- MSVC 2003 看不到嵌套包含文件中的任何定义
- 函数调用是否作为另一个函数参数遵循任何定义的行为