3
 // 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' is not a type

我该如何克服呢?我是否只需要创建一个不带参数的默认构造函数?

4

4 回答 4

8

听起来您正在尝试初始化成员变量。您可以执行以下操作:

class B
{
public:
    B() : memberA(A::eOne) {}  // Initializer list in constructor
private:
    A memberA;
};
于 2011-09-12T23:28:09.080 回答
1
class B
{
    public:
    B(A::eMyEnum someValue = A::eOne) : memberA(someValue) {};

    private:   
    A memberA;
}
于 2011-09-12T23:47:21.590 回答
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始终使用参数 as 调用 ' 构造函数A::eOne。您还没有展示如何在构造函数中使用此参数,但我认为在您的真实代码中它会初始化A. 如果成员必须始终具有相同的值,则创建它const并从构造函数中删除参数。

于 2011-09-13T09:45:24.487 回答
0

eOne 不是类型,eMyEnum 是类型。您实质上是在说“您必须将文字 2 传递给此方法”-这没有任何意义。如果您不打算将枚举传递给它,则必须澄清您的目的。

于 2011-09-12T23:25:47.430 回答