错误C2440:'初始化':无法从'initializer-list'转换

Fat*_*hid 6 c++ constructor initializer-list visual-studio

#include<iostream>
using namespace std;
struct TDate
{
    int day, month, year;
    void Readfromkb()
    {
        cout << "\n ENTER DAY MONTH YEAR\n";
        cin >> day >> month >> year;
    }
    void print()
    {
        cout << day << month << year;
    }
    private:
        int ID;
        bool valid;

};
int main()
{
    TDate t1, t2,t3={ 1, 2, 3 };
    t1.Readfromkb();
    t1.print();
    cin.ignore();
    cin.get();
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

为什么我得到错误1错误C2440:'初始化':无法从'initializer-list'转换为'TDate'和2 IntelliSense:初始化程序值太多.当我删除bool valid和int ID时程序可以工作.为什么会这样?

Obl*_*mov 6

您收到错误是因为您试图TDate从聚合初始化列表中初始化 a 。当类型具有私有成员(例如,在您的情况下,IDvalid)时,这无法完成。

您可以通过从三个ints为您的结构提供构造函数并使用TDate t1, t2, t3(1, 2, 3).