【问题标题】:Implementing structure from other header file从其他头文件实现结构
【发布时间】:2013-07-30 22:49:22
【问题描述】:

我必须在类头中有一个结构“configset”,如下所示:

class A {
public:
    static configset *getnext();
}

当然编译器会抱怨 configset 不是一个类型,但它是在另一个头文件中实现的,以及一些函数。因此,我不能只包含那个头文件,编译器会抛出这些函数被多次定义的错误。但是我怎样才能在我的类头中获取配置集?仅仅复制也不行,因为编译器会抛出一个结构被定义两次的错误。

【问题讨论】:

  • 多次包含一个文件应该没问题。如果编译器说函数被定义了多次,那意味着你的头文件设计得不好。 (A) 将函数 defintitions(不是声明)移动到 cpp 文件中,或 (B) 将函数标记为 inline

标签: c++ struct header extern


【解决方案1】:

转发声明configset 或将头文件中定义的函数声明为inline

【讨论】:

  • 转发声明就好了。谢谢。
【解决方案2】:

像这样使用前向声明

// Forward declare configset. Tells compiler that the class/struct is defined in 
// another translation unit
struct configset;

class A {
public:
    static configset *getnext();
};

请注意,这仅在您仅使用指向配置集的指针时才有效。

【讨论】:

    【解决方案3】:

    configset 方法的实现移动到单独的 .cpp(不是头文件)文件中。

    【讨论】:

      猜你喜欢
      • 2022-07-16
      • 1970-01-01
      • 2022-08-11
      • 2013-05-25
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多