首页 > 解决方案 > 用虚函数初始化结构

问题描述

大括号初始化

        struct A
        {
            int a;
            int b;
            void foo(){}
        };

        A a{1, 2};

它工作正常。但是如果把 foo 改成虚函数,就不会编译出错,

错误 C2440“正在初始化”:无法从“初始化程序列表”转换为

我发现这个

聚合是一个数组或一个类(第 9 条),没有用户提供的构造函数(12.1),没有私有或受保护的非静态数据成员(第 11 条),没有基类(第 10 条),也没有虚函数(10.3) )。

但背后的原因是什么?

标签: c++c++11structconstructorinitialization

解决方案


为什么不使用参数化构造函数virtual void foo() {}

struct A
{
    int a;
    int b;
    A(int a, int b)
    {
        this->a = a;
        this->b = b;
    }
    virtual void foo() {}
};
A a{ 1, 2 }; 

推荐阅读