0

我对 C++ 术语很陌生,所以希望我的标题不会太离谱。但我 100% 确定有人会告诉我 ;)

我有这段代码:

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

4 回答 4

3

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

于 2012-05-17T16:45:46.987 回答
3

您不允许在类/结构定义中初始化成员变量(例外:static const整数(例如int,,shortbool成员)

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

于 2012-05-17T16:46:13.070 回答
2

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

于 2012-05-17T16:47:36.210 回答
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);
于 2012-05-17T16:49:21.103 回答