2016-07-18 4 views
-1

私は内部にクラスを持つ名前空間を持っています。以下に示すように、私は名前空間と継承

class testClassTwo : public testClass 

の通常の方法を使用してTestClassを継承することができます知っている。しかし、私は、名前空間内で何の線に沿って何か

class testClass; 

私を見てきました

class testClass { 

public: 
    testClass() { std::cout << "neat" << std::endl; }; 
    ~testClass() { }; 
    void print() { 
     std::cout << "printOne" << std::endl; 
    } 

}; 

namespace test { 
    class testClass; 

    class testClassTwo { 
    public: 
     void printTwo() { 
      std::cout << "printTwo" << std::endl; 
     } 
    }; 
} 

これが実際に何をしているのかの確かな説明を見つけることができなかった、私はtestClassクラスから何かを継承していると仮定しています。

私は以下のような名前空間について簡単なことを理解しています。

test::testClassTwo classobj; 
classobj.printTwo(); 

私もコンパイルできます。 test :: testClass;

実際には何もできません。

誰かが私に何かの読書資料を送ってもらえますか、これを行うと実際に何が起こっているのかを簡単に説明できますか?

答えて

1

私はこれが実際に何をしているのかの確かな説明を見つけることができませんでした。私はtestClassクラスから何かを継承していると仮定しています。

これは誤った仮定です。 class testClassは、の前方宣言testClassデータ型です。対応するヘッダをインポートすることなく、testClassオブジェクトへのポインタと参照を宣言することができます。

前方宣言の詳細については、Q&Aを参照してください。

+0

お返事ありがとうございます。 – Dannys19

0

状況によって異なります。 コードのどこにありますか?

貼り付けたコードに、testClassという名前のクラスがtest名前空間に存在すると宣言します(コンパイラに通知します)。 (続きを読む:forward declaration

これはうまくコンパイルする必要がありますが、リンクすると定義されていないリダイレクトエラーが発生します。 test::testClassの定義はありません。

+0

これは、私が物事をテストするために使用しているコードの単純なビットですが、私は前方宣言を探していたようです。 – Dannys19

0
class testClass; 

これは、forward declarationです。通常、循環依存を防ぐために使用されます。

+0

答えをいただきありがとうございます、私は前方宣言を検討します。 – Dannys19