コンストラクターパラメーターを取得するメンバー変数を宣言します
-
29-10-2019 - |
質問
// In A.h
class A
{
public:
enum eMyEnum{ eOne, eTwo, eThree };
public:
A(eMyEnum e);
}
// In B.h
#include "A.h"
class B
{
B();
private:
A memberA;
}
// In B.cpp
#include "B.h"
B::B(void) : memberA(A::eOne)
{}
「Membera」への宣言は、G ++コンパイラを使用してコンパイルエラーを提供します: 'a :: eone'はタイプではありません
どうすればこれを克服できますか?パラメーターを使用しないデフォルトのコンストラクターを作成する必要がありますか?
解決
メンバー変数を初期化しようとしているようです。あなたは次のようなことをすることができます:
class B
{
public:
B() : memberA(A::eOne) {} // Initializer list in constructor
private:
A memberA;
};
他のヒント
A
コンストラクターはaを期待します eMyEnum
. 。なぜあなたが望むのかは明らかではありません B
受け入れないようにするコンストラクター eMyEnum
パラメーターも。ともかく、 仮定します あなたの目的は議論を渡すことです A
'のコンストラクターとして A::eOne
(とは対照的に A::eMyEnum::eOne
)、次のコードを試すことができます。 typedef
.
#include <iostream>
using namespace std;
class A {
public:
typedef enum { eOne, eTwo, eThree } eMyEnum;
public:
A(eMyEnum e) {
cout << "A ctor" << endl;
}
};
class B {
public:
B() : memberA(A::eOne) {
cout << "B ctor" << endl;
}
private:
A memberA;
};
int main() {
B b;
}
// output
A ctor
B ctor
ただし、それに注意してください memberA
のコンストラクターは常に引数と呼ばれます A::eOne
. 。あなたはこの引数がコンストラクターでどのように使用されているかを示していませんが、私はあなたの実際のコードでそれがのメンバーを初期化すると思います A
. 。メンバーが常に同じ値を持っている必要がある場合は、 const
コンストラクターからパラメーターを削除します。
class B
{
public:
B(A::eMyEnum someValue = A::eOne) : memberA(someValue) {};
private:
A memberA;
}
eoneはタイプではなく、エミエヌムはタイプです。本質的に言っているのは、「リテラル2をこの方法に渡す必要がある」ということです。意味がありません。列挙を渡すつもりがない場合は、何を目指していたのかを明確にする必要があります。
所属していません StackOverflow