使用大括号括起初始化列表初始化结构时出错

use*_*934 10 c++ constructor struct

struct CLICKABLE
{
    int x;
    int y;
    BITMAP* alt;
    BITMAP* bitmap;

    CLICKABLE()
    {
        alt=0;
    }
};

CLICKABLE input={1,2,0,0};
Run Code Online (Sandbox Code Playgroud)

此代码给出了以下错误:

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

有人可以解释一下为什么编译器会给我这个错误,以及我如何解决它?我还在学习这门语言.

jua*_*nza 15

您的类有一个构造函数,因此它不是聚合,这意味着您不能使用聚合初始化.您可以添加一个构造函数,其中包含正确的参数数量和类型:

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() {}

};
Run Code Online (Sandbox Code Playgroud)

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

CLICKABLE a = {};         // all members are zero-initialized
CLICKABLE b = {1,2,0,0};
Run Code Online (Sandbox Code Playgroud)

  • @Hi-Angel 虽然语法相同,但如果类型不是聚合,则它不是“聚合初始化”。我认为它被称为“列表初始化”之类的东西,它是聚合初始化的超集。 (2认同)