C++ 是否可以向前声明命名空间中的typedef?
我环顾四周,不知道其他类似的问题是否回答了这个问题C++ 是否可以向前声明命名空间中的typedef?,c++,struct,typedef,forward-declaration,C++,Struct,Typedef,Forward Declaration,我环顾四周,不知道其他类似的问题是否回答了这个问题 // lib.h namespace lib_namespace { struct lib_struct { typedef std::vector<LibObject> struct_value; }; typedef lib_struct::struct_value lib_value; // compiler points here }; // my.h // attempt at forward
// lib.h
namespace lib_namespace
{
struct lib_struct
{
typedef std::vector<LibObject> struct_value;
};
typedef lib_struct::struct_value lib_value; // compiler points here
};
// my.h
// attempt at forward declaration
namespace lib_namespace { class lib_value; };
...
// my.cpp
#include "lib.h"
//lib.h
名称空间lib_名称空间
{
结构库
{
typedef std::向量结构值;
};
typedef lib_struct::struct_value lib_value;//编译器指向此处
};
//我的
//企图提前申报
名称空间lib_名称空间{class lib_value;};
...
//my.cpp
#包括“lib.h”
我得到了一个可以理解的重新定义编译器错误,但是有没有办法向前声明typedef呢
我的目的是避免将lib.h添加为我正在创建的库之外的依赖项。也许有更好的方法来实现这一点
编辑:为了澄清,我试图避免在所有使用我正在创建的库的项目文件中添加一个额外的include directories行,因为我正在使用第三方库,而上述情况正是我陷入困境的地方。因此,如果我在
my.cpp
中包含lib.h
,但不包括my.h
,名称空间与问题无关,这是可以的。不能向前声明typedef;只能正向声明实际类型(类和结构)。编译器会抱怨,因为lib.h
和my.h
是独立的头文件,它们彼此不了解。此外,与实际的类不同,typedef
不支持转发声明
假设您不想#包括“lib.h”
,那么您可以创建一个单独的标题,该标题具有typedef lib\u struct::struct\u value lib\u value代码>及其相关部分<代码>#在需要时包括
新标题