2012-02-09 11 views
1

私は、私のクラスの別のクラスで書いたカスタムクラスのオブジェクトを作成する必要があるC++の小さなプロジェクトに取り組んでいます。クラスはFIRFilterModuleと呼ばれ、単純な空のコンストラクタがあります。C++でのオブジェクト構築

Javaの背景のもので、私の衝動は、このようにそれを作成することです:

class SensorInput{ 
public: 

    FIRFilterModule firFilter; 
    ...More Class Members... 
    SensorInput():firFilter(FIRFilterModule()){} 
...}; 

しかし、これは「このコンテキスト内でエラー」のこれまでのように有用なエラーメッセージを表示してコンパイルします。私はなぜそれが動作しないのか少し失われています。私の混乱を増やしました。コードをこれに変更しました:

class SensorInput{ 
public: 

    FIRFilterModule firFilter; 
    ...More Class Members... 
    SensorInput(){} 
...}; 

これは機能します。

これがなぜそうであるか理解してくれる人がいますか?

+0

上記のとおり、FIRFilterModuleはパブリックコンストラクタを使用して書いたクラスです。 firFilterは、SensorInputで作成するオブジェクトです。それは私が得た完全なエラーでした。コンパイラは、ウインドリバーのデフォルトコンパイラ – jozefg

答えて

6

この特定の場合、メンバーフィールドのデフォルトのコンストラクタを実行すると、何もする必要はありません。コンストラクタは自動的に実行されます。だからあなたはちょうどあなたが引数を持つコンストラクタを呼び出すか、PODタイプを初期化する必要があるときにメンバー初期化リストのみが必要とされている

class SensorInput{ 
public: 

    FIRFilterModule firFilter; 

    SensorInput() { ... } 
}; 

を書くことができます。たとえば、FIRFilterModuleには、intというコンストラクターがあるとします。そして、あなたはたぶん、あなたはFIRFilterModuleが宣言されたヘッダを含めるのを忘れて

SensorInput() : firFilter(42) { ... } 
+0

"あなたは何もする必要はありません" <= Trueを使用しています。 SensorInput():firFilter(){...}を使用して明示的にすることもできます。 –

+0

FIRFilterModuleをどこにでも構築するときに適用されますか?たとえば、私はint main()で1つを作成しました。 – jozefg

+0

@jozefgはい。 'FIRFilterModule'のインスタンスが宣言されている場所に適用されます。これは 'FIRFilterModule *' – JaredPar

1

The code you posted is correct.

memeber初期化リストを使用します。

それ以外の場合は、すべて動作するはずです。

+0

気をつけてくださいdownvoteにコメントしますか? –

+0

申し訳ありませんが、私はすべてを含め、トリプルFIRFilterModuleをチェックしました。私は他の人に自分のコードを見てもらうように頼んだが、バグは間違いなくそのコードスニペットにある。 – jozefg

+0

さらに、イニシャライザのリストから削除すると、それが実行されます。 – jozefg

関連する問題