// 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'不是类型
我怎样才能克服这一点?我只需要创建一个不带参数的默认构造函数吗?
答案 0 :(得分:8)
听起来您正在尝试初始化成员变量。你可以这样做:
class B
{
public:
B() : memberA(A::eOne) {} // Initializer list in constructor
private:
A memberA;
};
答案 1 :(得分:1)
class B
{
public:
B(A::eMyEnum someValue = A::eOne) : memberA(someValue) {};
private:
A memberA;
}
答案 2 :(得分:1)
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
并从构造函数中删除该参数。
答案 3 :(得分:0)
eOne不是类型,eMyEnum是类型。你基本上说的是“你必须将文字2传递给这种方法” - 它没有任何意义。如果你不打算将枚举传入其中,你就必须澄清你的目标。