类中对象构造函数/初始化失败

时间:2012-05-17 16:43:00

标签: c++ object constructor

我对C ++术语很陌生,所以希望我的标题不会太过分。但我百分百肯定会有人告诉我;)

我有这段代码:

struct B {
  struct A {
    A() : a(0) { }
    A(int a) { this->a = a; }
    int a;
  }
    a0,    // OK
    a1(1); // NOT OK!

  B() : b(0) { }
  B(int b) { this->b = b; }
  int b;
}
  b0,    // OK
  b1(1); // OK

但是gcc无法编译并生成此输出:

8:8: error: expected identifier before numeric constant
8:8: error: expected ‘,’ or ‘...’ before numeric constant
2:3: error: new types may not be defined in a return type
2:3: note: (perhaps a semicolon is missing after the definition of ‘B::A’)

如果删除'a1(1)'对象或将其更改为'a1',则编译没有问题。但后来我无法使用'A(int a)'构造函数。类似的?对象'b1'的构造函数没有问题。对此有何解释?谢谢:))

4 个答案:

答案 0 :(得分:3)

您的对象和实例不匹配。 你不能在类B的定义中有一个预构造的对象(A的实例),除非它是静态const,但是你仍然不能在类声明中初始化它。

答案 1 :(得分:3)

不允许在类/结构定义中初始化成员变量(例外:static const积分(例如intshortbool)成员)< / p>

b0b1的情况下,您声明(并初始化)两个全局变量,而不是成员变量

答案 2 :(得分:2)

a0a1是外部结构的成员,就像普通属性一样,你不能内联它们。您需要在a0构造函数初始化列表中初始化a1B

答案 3 :(得分:2)

如果您要求正确的语法..,

struct B {
    struct A {
        int a;

        A()      : a(0) { }
        A(int a) : a(a) { }
    } a0, a1;

    int b;

    B()      : a0(), a1(1), b(0) { }
    B(int b) : a0(), a1(1), b(b) { }
} b0, b1(1);