2

私が書くクラスにメンバー変数を含めようとしていますが、

MyClass.h

#include <SomeClass.h>
Class MyClass{
    public:
        MyClass(int par);
        SomeClass B;
}

MyClass.cpp

#include "MyClass.h"
#include "SomeClass.h"
MyClass::MyClass(int par){
    B=SomeClass(par);
}

ただしSomeClass、コンストラクターには変数を使用するため、上記のコードは次のようになりますno matching function for call to "SomeClass::SomeClass()"

ここで何をすべきですか?

更新: メンバー初期化子リストが適しているようですが、SomeClassオブジェクトの配列を使用したい場合はどうすればよいですか? したがって、 MyClass.h は次のようになります。

#include <SomeClass.h>
Class MyClass{
    public:
        MyClass(int par);
        SomeClass B[2];
}
4

2 に答える 2

4

メンバー初期化子リストを使用

MyClass::MyClass(int par) : B(par)
{
}
于 2013-01-18T10:36:05.137 に答える
1

欲しいものはなかなか手に入らないが、必要なものは手に入れることができる。オブジェクトのセットへの配列アクセスを提供するには、ポインターの配列を作成します

Class MyClass {
public:
    MyClass(int par);
    SomeClass B0;
    SomeClass B1
    SomeClass* B[2];

次に、コンストラクターでポインターを初期化します。

MyClass::MyClass(int par) :
  B0(123), B1(456)
{
    B[0] = &B0;
    B[1] = &B1;
}

これは、オブジェクトの数が少ない場合よりも明らかに面倒ですが、マイクロコントローラーで実行する可能性が高いものであれば問題ありません。これで、必要に応じて使用できるオブジェクト ポインターの配列ができました。

for(i=0; i<2; i++) {
    B[i]->foo();
}

各オブジェクトへのポインタのために追加のメモリを消費していることに注意してください。

于 2013-01-19T01:30:21.363 に答える