【问题标题】:Error when initializing a struct with a brace-enclosed initializer list使用大括号括起来的初始值设定项列表初始化结构时出错
【发布时间】:2014-07-15 06:45:38
【问题描述】:
struct CLICKABLE
{
    int x;
    int y;
    BITMAP* alt;
    BITMAP* bitmap;

    CLICKABLE()
    {
        alt=0;
    }
};

CLICKABLE input={1,2,0,0};

这段代码给了我以下错误:

无法从大括号括起来的初始化列表转换

谁能解释一下为什么编译器给我这个错误,我该如何解决?我还在学习语言。

【问题讨论】:

    标签: c++ struct constructor


    【解决方案1】:

    你的类有一个构造函数,所以它不是一个聚合,这意味着你不能使用聚合初始化。您可以添加一个带有正确数量和类型参数的构造函数:

    struct CLICKABLE
    {
      int x;
      int y;
      BITMAP* alt;
      BITMAP* bitmap;
    
      CLICKABLE(int x, int y, BITMAP* alt, BITMAP* bitmap) 
      : x(x), y(y), alt(alt), bitmap(bitmap) { ... }
    
      CLICKABLE() : x(), y(), alt(), bitmap() {}
    
    };
    

    或者,您可以删除用户声明的构造函数,并使用聚合初始化:

    CLICKABLE a = {};         // all members are zero-initialized
    CLICKABLE b = {1,2,0,0};
    

    【讨论】:

    • 实际上聚合初始化也可以与用户声明的构造函数一起使用,就像本例中存在第一个构造函数一样。
    • @Hi-Angel 虽然语法相同,但如果类型不是聚合,则它不是“聚合初始化”。我认为它被称为“列表初始化”之类的东西,它是聚合初始化的超集。
    猜你喜欢
    • 2011-05-31
    • 2013-08-23
    • 2012-11-21
    • 1970-01-01
    • 2021-11-21
    • 2016-12-11
    • 2014-05-13
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多