생성자 매개변수를 사용하는 멤버 변수 선언
-
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)
{}
g++ 컴파일러를 사용하면 'memberA'에 대한 선언으로 인해 컴파일 오류가 발생합니다.오류:'A::eOne'은 유형이 아닙니다.
어떻게 해야 이 문제를 극복할 수 있나요?매개 변수를 사용하지 않는 기본 생성자를 만들어야 합니까?
해결책
멤버 변수를 초기화하려고하는 것과 같습니다.당신은 다음과 같은 일을 할 수 있습니다 :
class B
{
public:
B() : memberA(A::eOne) {} // Initializer list in constructor
private:
A memberA;
};
. 다른 팁
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은 유형이 아닙니다, Emyenum은 유형입니다.본질적으로 당신이 말하는 것은 "당신은이 방법으로 리터럴 2를 전달해야한다는 것입니다."그것은 어떤 의미가 있지 않습니다.열거 형을 지나갈 것인지 아니면 당신이가는 것을 명확히해야합니다.
제휴하지 않습니다 StackOverflow