【问题标题】:Is it possible to forward declare a typedef that is within a namespace?是否可以转发声明名称空间内的 typedef?
【发布时间】:2012-02-28 04:51:34
【问题描述】:

我环顾四周,无法确定其他类似问题是否回答了这个问题。

// 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

【问题讨论】:

    标签: c++ struct typedef forward-declaration


    【解决方案1】:

    您的编译器抱怨,因为lib.hmy.h 是独立的头文件,它们彼此不知道。此外,与实际的class 不同,typedef 不支持前向声明。

    假设您不想#include"lib.h",那么您可以创建一个单独的标题,其中包含typedef lib_struct::struct_value lib_value; 和与之相关的相关部分。 #include 需要的新标头。

    【讨论】:

      【解决方案2】:

      命名空间与问题无关。您不能转发声明 typedef;只有实际类型(类和结构)可以前向声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 2017-11-21
        • 2021-02-12
        相关资源
        最近更新 更多