代码之家  ›  专栏  ›  技术社区  ›  tunnuz

构造函数中的奇怪行为

  •  2
  • tunnuz  · 技术社区  · 17 年前

    我有一个由几个字段组成的类,我有几个构造函数。我还有一个不带任何参数的构造函数,但当我尝试使用它时:

    int main {
        A a;
    }
    

    int main {
        A a();
    }
    

    没关系。那是什么?

    非常感谢。

    4 回复  |  直到 17 年前
        1
  •  11
  •   CB Bailey    17 年前

    第一 main

    那么A的定义看起来像什么,编译器生成的错误是什么?

    哦,您需要在main的声明中提供一个参数列表: int main() { //... int main { //...

        2
  •  2
  •   Michael Burr    17 年前

    你是说它可以编译还是可以工作?代码行:

       A a();
    

    是名为的函数的声明(或原型) a A .

    我认为,如果任何人有机会帮助你解决真正的问题,你至少需要发布一份声明 class A

        3
  •  1
  •   j_random_hacker    17 年前

    Charles和Michael Burr都认为第二个声明实际上是一个函数原型,而不是 A .

    至于您的第一个代码段不起作用的可能原因,在这种情况下,您将在以下情况下获得编译错误:

    1. 从没有默认构造函数的基类继承;或
    2. 包含没有默认构造函数的类型的对象;或
    3. A. 包含参考成员;

    您提供了一个默认构造函数,该构造函数从其初始化器列表中省略了一个或多个子对象。

    所有这些子对象都需要以某种方式进行初始化,而编译器生成的默认构造函数不会这样做。请注意,在所有情况下,都需要在 初始化器列表 构造函数的一部分。

        4
  •  0
  •   tunnuz    17 年前

    这个班。