2017-02-12 11 views
0

我正在寫C++,我的代碼越來越大。我想知道如果我能以某種方式將代碼片段移動到不同的文件。比方說,我有:如何將代碼片段移動到C++中的不同文件?

class First { 
    class Second 
    { 
     void a(); 
     void b(); 
    }; 
    void c(); 
}; 

我想我的第二類移動到Second.h文件,然後當然寫第二類機構和功能集成到Second.cpp文件。我怎樣才能做到這一點?

+0

....嘗試複製和粘貼?對不起,你一直都不清楚你在問什麼,你試過了什麼,你有什麼問題等等。 –

+0

你爲什麼要/需要那種分離?你能否詳細說明你的實際用例? –

回答

0

鑑於class Second嵌套在class First你可以通過重構你的代碼,像這樣開始:

class First 
{ 
    class Second; 
    void c(); 
}; 
class First::Second 
{ 
    void a(); 
    void b(); 
}; 

從那裏很容易兩類闖入單獨的文件:

First.h:

class First 
{ 
    class Second; 
    void c(); 
}; 

而且Second.h

#include "First.h" 

class First::Second 
{ 
    void a(); 
    void b(); 
}; 

然後你.cpp文件將是:

First.cpp

#include "First.h" 
void First::c() 
{ 

} 

Second.cpp

#include "Second.h" 
void First::Second::a() 
{ 

} 

void First::Second::b() 
{ 

} 
+0

非常感謝,這就是我的意思。我遵循你的方式。現在,我想我的第二類(在第一類)的對象,但是我的編譯器會拋出錯誤:「不完全類型不允許」和「First :: a使用未定義的類First :: Second」,儘管我的第二類HAS正如你的代碼一樣。你知道也許爲什麼我不能創建這個對象? – Adas

+0

不幸的是沒有這樣做的好方法。這是嵌套類的缺點之一,特別是當它們被打破時。如果我不得不建議我只在同一個標​​題中保留「First」和「Second」。這就像我的例子中的第一個代碼片段。你可以在不同的'.cpp'文件中保存實現。問題是'First'沒有在其標題中完整聲明'Second',只有前向聲明。 –

+0

@Adas爲什麼你首先使用嵌套類?你確定你不只是想把'second'的*實例*作爲'First'的*成員*嗎?另外,如果你用這種方式分解代碼,那麼'First'的用戶需要包含'Second.h'。爲避免出現這種情況,請在First.h的*底部添加#include Second.h,並確保添加了[include guard](https://en.wikipedia.org/wiki/Include_guard)。 –

0

假設您有First.h

class First{ 
    class Second 
    { 
     void a(); 
     void b(); 
    }; 
    void c(); 
}; 

你可以提供的class Second在一個單獨的翻譯單元的實現: 像

First.cpp:

#include "First.h" 
void First::c() { 
} 

Second.cpp:

#include "First.h" 

void First::Second::a() { 
} 
void First::Second::b() { 
} 

我不確定這就是你想要的。

+0

非常感謝,這幾乎是我想要的 – Adas

相關問題