2013-06-27 48 views
0

目前我有一個大類Policy,它分別在文件globals.hglobals.cpp中聲明和定義。除了Policy類之外,這些文件還包含幾個使用Policy類的其他類和函數。由於編譯時間問題,我現在想將Policy類與其他所有類分開。我希望在其他源文件中定義所有其他類和所有使用Policy的函數,以便在更改Policy類時,我不必重新編譯所有其他類和函數。在多個源/頭文件中使用C++類時設置頭文件

但是,當我嘗試分離東西時,嘗試使用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 
} 

所以,現在我會得到我的具體的(雖然開放式的,可能是模糊的)問題。 ..

問題:鑑於我原本是h廣告上面描述的設置,並且當我試圖將上面的內容拆分爲policy.cpppolicy.hother.cppother.h時,我遇到了很多「字段不完整類型」錯誤,我可能會犯什麼樣的錯誤?


我希望對這個問題的回答將幫助我確定我可以仔細研究之前,我再次試圖分裂我的代碼的問題。 做出更改並遇到錯誤後,我放棄並恢復到上述原始設置。但後來,我決定重新考慮並重試將內容分割成多個源文件。所以,我沒有可以分享的特定問題代碼。

回答

1

在包含其他包含std::vector<Something>的標頭之前,請確保您包含<vector>。例如,在globals.cpp之前在#include "globals.h"之前加上#include <vector>

此外,您不能在需要知道其大小的類型(如std::vector<Policy>)中使用類似Policy的前向聲明結構/類類型。 std::vector<*Policy>雖然會工作。