2017-02-12 3 views
0

私はC++に書いています。私のコードはますます大きくなっています。どういうわけかコードフラグメントを別のファイルに移動できるのだろうかと思います。のは、私が持っているとしましょう:C++でコードフラグメントを別のファイルに移動するには?

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

私はSecond.hファイルに私の第二のクラスを移動し、その後の進路Second.cppファイルに第二のクラスの体と関数を記述したいと思います。これどうやってするの?

+0

....コピー&ペーストしてみてください?申し訳ありませんが、あなたが何を求めているのか、何を試しているのか、どのような問題があるのか​​はっきりしていません。 –

+0

そのような分離を望んでいる/必要があるのはなぜですか?あなたの実際のユースケースについて詳しく教えてください。 –

答えて

0
class Firstにネストされている class Secondあなたがそうのようなあなたのコードをリファクタリングすることから始めることができることを考えると

First.h:別のファイルに2つのクラスを破ることは容易である。そこから

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

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

ありがとう、それは私が言ったことです。私はあなたの方法に従った。今度は私の第2クラス(Firstクラス)のオブジェクトを作成したいのですが、コンパイラはエラーをスローします: "Incomplete type is not"と "First :: aは未定義クラスFirst :: Secondを使用します。あなたのコードのようなボディ。私はなぜオブジェクトを作成できないのでしょうか? – Adas

+0

残念ながら、これを行う良い方法はありません。それはネストされたクラスを持っていることの欠点の1つです。私が提案しなければならないのは、同じヘッダーに 'First'と' Second'を置いておくだけです。私の例では、最初のコードスニペットのようになります。実装を別々の '.cpp'ファイルに保存することができます。問題は、 'First'はヘッダーに' Second'という完全宣言がなく、前方宣言だけであるということです。 –

+0

@ Adasなぜ最初にネストされたクラスを使用していますか? 'Second'の*インスタンス*を' First'の* member *として欲しいだけではないですか?また、このようにコードを分割すると、 'First'のユーザーは' Second.h'をインクルードする必要があります。これを避けるには、 '#include Second.h'を' First.h'の* bottom *に置き、[include guards](https://en.wikipedia.org/wiki/Include_guard)を追加してください。 –

0

あなたが別の翻訳単位にclass Secondの実装を提供することができますが、First.h

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

を持っていると仮定しましょう:

ようFirst.cpp:

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

Second.cpp:

#include "First.h" 

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

私はあなたが何をしているのかは分かりません。

+0

ありがとう、それは私がほしいと思っていたものです。 – Adas

関連する問題