我正在寫C++
,我的代碼越來越大。我想知道如果我能以某種方式將代碼片段移動到不同的文件。比方說,我有:如何將代碼片段移動到C++中的不同文件?
class First {
class Second
{
void a();
void b();
};
void c();
};
我想我的第二類移動到Second.h文件,然後當然寫第二類機構和功能集成到Second.cpp文件。我怎樣才能做到這一點?
我正在寫C++
,我的代碼越來越大。我想知道如果我能以某種方式將代碼片段移動到不同的文件。比方說,我有:如何將代碼片段移動到C++中的不同文件?
class First {
class Second
{
void a();
void b();
};
void c();
};
我想我的第二類移動到Second.h文件,然後當然寫第二類機構和功能集成到Second.cpp文件。我怎樣才能做到這一點?
鑑於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()
{
}
非常感謝,這就是我的意思。我遵循你的方式。現在,我想我的第二類(在第一類)的對象,但是我的編譯器會拋出錯誤:「不完全類型不允許」和「First :: a使用未定義的類First :: Second」,儘管我的第二類HAS正如你的代碼一樣。你知道也許爲什麼我不能創建這個對象? – Adas
不幸的是沒有這樣做的好方法。這是嵌套類的缺點之一,特別是當它們被打破時。如果我不得不建議我只在同一個標題中保留「First」和「Second」。這就像我的例子中的第一個代碼片段。你可以在不同的'.cpp'文件中保存實現。問題是'First'沒有在其標題中完整聲明'Second',只有前向聲明。 –
@Adas爲什麼你首先使用嵌套類?你確定你不只是想把'second'的*實例*作爲'First'的*成員*嗎?另外,如果你用這種方式分解代碼,那麼'First'的用戶需要包含'Second.h'。爲避免出現這種情況,請在First.h的*底部添加#include Second.h,並確保添加了[include guard](https://en.wikipedia.org/wiki/Include_guard)。 –
假設您有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() {
}
我不確定這就是你想要的。
非常感謝,這幾乎是我想要的 – Adas
....嘗試複製和粘貼?對不起,你一直都不清楚你在問什麼,你試過了什麼,你有什麼問題等等。 –
你爲什麼要/需要那種分離?你能否詳細說明你的實際用例? –