加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否可以转发声明名称空间内的typedef?

发布时间:2020-12-16 07:29:16 所属栏目:百科 来源:网络整理
导读:我环顾四周,我不知道其他类似的问题是否能解决这个问题. // lib.hnamespace lib_namespace{ struct lib_struct { typedef std::vectorLibObject struct_value; }; typedef lib_struct::struct_value lib_value; // compiler points here};// my.h// attempt
我环顾四周,我不知道其他类似的问题是否能解决这个问题.

// 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是独立的头文件,他们彼此不知道.而且,与实际类不同,typedef不支持前向声明.

假设您不想#include“lib.h”,那么您可以创建一个单独的头文件,其中包含typedef lib_struct :: struct_value lib_value;以及与之相关的相关部分. #include在任何需要的地方新的标题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读