在多个源/头文件中使用c ++类时设置头文件

时间:2013-06-27 22:30:40

标签: c++ class header

目前,我有一个大型类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以及{{1我和other.cpp遇到了很多“字段不完整类型”错误,我可能犯了什么样的错误?


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

1 个答案:

答案 0 :(得分:1)

请确保在添加包含<vector>的其他标头之前添加std::vector<Something>。例如,在globals.cpp之前#include <vector>添加#include "globals.h"

此外,您不能在需要知道其大小的类型(如Policy)中使用来自globals.h的{​​{1}}的前向声明的结构/类类型。 std::vector<Policy>会起作用。