为什么我不能使用构造函数初始化列表来初始化类内结构?

凯文·艾森

我正在尝试这样做:

class test{
    public:
    struct obj{
        int _objval;
    };
    obj inclassobj;
    int _val;
    test(){}
    test(int x):_val(x){}
    test(int x, int y): _val(x), inclassobj._objval(y){}

};

它不起作用。除非我像这样将类内结构部分放入构造函数的主体中:

test(int x, int y){
    _val = x;
    inclassobj._objval = y;
}

这种方式效果很好。然后我发现有人说除非我可以给我的类内对象它自己的构造函数,然后我这样做了,它不起作用:

class test{
    public:
    struct obj{
        int _objval;
        obj(){}
        obj(int val): _objval(val){}
    };
    obj inclassobj(6);
};

错误出现在我尝试实例化的行objobj inclassobj(6);我完全不知道这一点。第一个问题是为什么在这种情况下我不能使用构造函数初始化列表来初始化类内结构?如果原因是我需要给该结构一个构造函数,为什么第二部分也不起作用?

update:: 我意识到我可以使用指针来初始化类内对象,如下所示:

class test{
    public:
    struct obj{
        int _objval;
        obj(){}
        obj(int val): _objval(val){}
    };
    obj* inclassobj = new obj(6);
};

但为什么?

雷米·勒博

在您的 2 参数构造函数中,您可以使用内部结构的聚合初始化,例如:

test(int x, int y): _val(x), inclassobj{y}{}

在线演示

在您的第二个示例中,将构造函数添加到内部结构很好,您只需要在外部类的构造函数成员初始化列表中调用它,例如:

test(int x, int y): _val(x), inclassobj(y){}

在线演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么我们不能使用构造函数本身来初始化servlet?

来自分类Dev

为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

来自分类Dev

为什么可以使用大括号初始化对aggreggate结构进行大括号初始化,但不能使用与大括号初始化中相同的参数列表来放置它?

来自分类Dev

为什么C ++ 11类内初始化程序不能使用括号?

来自分类Dev

为什么我不能使用for循环初始化实例-Python,类

来自分类Dev

为什么我们不能延迟使用非默认构造函数初始化类成员?

来自分类Dev

为什么不能使用两层列表初始化器来初始化2D std :: array?

来自分类Dev

为什么在构造函数初始化期间不能使用范围解析运算符?

来自分类Dev

为什么我的值未由初始化(参数化)构造函数初始化?

来自分类Dev

为什么不能使用右值来初始化左值引用?

来自分类Dev

为什么不能使用“ 0x80000000”来初始化int数组?

来自分类Dev

类内初始化与构造函数初始化列表的顺序

来自分类Dev

使用构造函数初始化列表初始化结构时出现问题

来自分类Java

为什么我们不能调用servlet构造函数而不是init方法来初始化config参数?

来自分类Dev

为什么我们不能在构造函数初始化列表中初始化静态变量,但可以在构造函数主体中初始化

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

为什么在为Matrix类实现初始化列表构造函数时不能访问此数组?

来自分类Dev

在初始化列表中使用空构造函数初始化父类?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类PHP

为什么我不能使用Vue初始化频道?

来自分类Dev

为什么我不能使用指针初始化数组?

来自分类Dev

为什么我们不能使用scanf直接初始化struct中的变量?

来自分类Dev

C:为什么我不能用大括号初始化数组内的结构?

来自分类Dev

为什么我必须使用 this 关键字来初始化构造函数中的实例变量?

来自分类Dev

无法初始化向量来保存使用其构造函数初始化的另一个类

来自分类Dev

为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

来自分类Dev

为什么clang和gcc用类内初始化对结构的支撑初始化进行不同的处理?

来自分类Java

为什么不能使用new关键字在Java中初始化抽象类?

来自分类Dev

为什么使用声明的继承构造函数不使用默认构造函数初始化虚拟基类?

Related 相关文章

  1. 1

    为什么我们不能使用构造函数本身来初始化servlet?

  2. 2

    为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

  3. 3

    为什么可以使用大括号初始化对aggreggate结构进行大括号初始化,但不能使用与大括号初始化中相同的参数列表来放置它?

  4. 4

    为什么C ++ 11类内初始化程序不能使用括号?

  5. 5

    为什么我不能使用for循环初始化实例-Python,类

  6. 6

    为什么我们不能延迟使用非默认构造函数初始化类成员?

  7. 7

    为什么不能使用两层列表初始化器来初始化2D std :: array?

  8. 8

    为什么在构造函数初始化期间不能使用范围解析运算符?

  9. 9

    为什么我的值未由初始化(参数化)构造函数初始化?

  10. 10

    为什么不能使用右值来初始化左值引用?

  11. 11

    为什么不能使用“ 0x80000000”来初始化int数组?

  12. 12

    类内初始化与构造函数初始化列表的顺序

  13. 13

    使用构造函数初始化列表初始化结构时出现问题

  14. 14

    为什么我们不能调用servlet构造函数而不是init方法来初始化config参数?

  15. 15

    为什么我们不能在构造函数初始化列表中初始化静态变量,但可以在构造函数主体中初始化

  16. 16

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  17. 17

    为什么在为Matrix类实现初始化列表构造函数时不能访问此数组?

  18. 18

    在初始化列表中使用空构造函数初始化父类?

  19. 19

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  20. 20

    为什么我不能使用Vue初始化频道?

  21. 21

    为什么我不能使用指针初始化数组?

  22. 22

    为什么我们不能使用scanf直接初始化struct中的变量?

  23. 23

    C:为什么我不能用大括号初始化数组内的结构?

  24. 24

    为什么我必须使用 this 关键字来初始化构造函数中的实例变量?

  25. 25

    无法初始化向量来保存使用其构造函数初始化的另一个类

  26. 26

    为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

  27. 27

    为什么clang和gcc用类内初始化对结构的支撑初始化进行不同的处理?

  28. 28

    为什么不能使用new关键字在Java中初始化抽象类?

  29. 29

    为什么使用声明的继承构造函数不使用默认构造函数初始化虚拟基类?

热门标签

归档