【问题标题】:Header files setup when using c++ class in multiple source/header files在多个源/头文件中使用 c++ 类时的头文件设置
【发布时间】:2013-06-27 22:30:39
【问题描述】:

目前我有一个大类Policy,分别在名为globals.hglobals.cpp 的文件中声明和定义。除了Policy 类之外,这些文件还包含其他几个使用Policy 类的类和函数。由于编译时间问题,我现在想将Policy 类与其他所有内容分开。我希望在另一个源文件中定义所有其他类和所有使用Policy 的函数,这样当我更改Policy 类时,我不必重新编译所有其他类和函数。

但是,当我尝试分离事物时,在尝试使用 Policy 类时出现很多“字段类型不完整”错误。我相信这是由于错误使用了#include 语句。

下面我尝试以简单明了的方式模仿我的设置。请注意,还有许多其他源文件也是#include "globals.h"

globals.h:

#ifndef GLOBALS_H_
#define GLOBALS_H_

class Policy;

class A {
    A(std::vector<Policy>);
};

class Policy {

    // many member objects and functions declared
};

void func1(Policy&);
void func2(Policy&);

#endif

globals.cpp:

#include "globals.h"

A::A(std:vector<Policy> p) {
    // do stuff
}

//
// Define all of Policy's member functions
//

void func1(Policy& p) {
    // do stuff
}

void func2(Policy& p) {
    // do stuff
}

所以,现在我将提出我的具体问题(尽管是开放式的,可能是模糊的)......

问题:鉴于我最初具有上述设置,并且当我尝试将上述内容拆分为policy.cpppolicy.h,以及other.cppother.h 时,我遇到了很多“字段类型不完整”的错误,我可能犯了什么样的错误?


我希望对这个问题的回答能帮助我找出我可以仔细研究的问题,然后再尝试拆分我的代码。 进行更改并遇到错误后,我放弃并恢复到上述原始设置。然而,后来,我决定重新考虑并重新尝试将内容拆分为多个源文件。所以,我没有可以分享的具体问题代码。

【问题讨论】:

    标签: c++ class header


    【解决方案1】:

    确保在包含其他包含 std::vector&lt;Something&gt; 的标头之前包含 &lt;vector&gt;。例如,在globals.cpp 中,在#include "globals.h" 之前添加#include &lt;vector&gt;

    此外,您不能在需要知道其大小的类型(如std::vector&lt;Policy&gt;)中使用来自globals.h 的前向声明的结构/类类型(如Policy)。 std::vector&lt;*Policy&gt; 会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多