是否可以转发声明命名空间内的 typedef
Is it possible to forward declare a typedef that is within a namespace?
我环顾四周,我不太清楚其他类似的问题是否回答了这个问题。
// 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"
我得到一个可以理解的重定义编译器错误,但是有没有办法转发声明该 typedef?
我的目的是避免在我正在制作的库之外添加 lib.h 作为依赖项。 也许有更好的方法来实现这一目标?
编辑:为了澄清,我试图避免向所有使用我正在创建的库的项目文件添加额外的包含目录行,因为我正在使用第三方库,上述情况是我卡住的地方。 因此,如果我在my.cpp
中包含lib.h
是可以的,但不能my.h
.
编译器抱怨,因为lib.h
和my.h
是独立的头文件,它们彼此不知道。此外,与实际class
不同,typedef
不支持前向声明。
假设您不想#include"lib.h"
,那么您可以创建一个单独的标头,其中包含typedef lib_struct::struct_value lib_value;
和与之相关的相关部分。 在需要的地方#include
新的标头。
命名空间
与问题无关。不能转发声明类型定义;只能向前声明实际类型(类和结构(。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- Typedef 不是命名空间的成员
- 在 typedef 中使用相同的名称,并从命名空间使用
- C++:我应该使用'typedef'还是"使用命名空间"?
- 解析typedef和命名空间VS2010
- 是否可以转发声明命名空间内的 typedef
- typedef 或在我的命名空间中公开外部库类时使用的 using 关键字