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

时间:2015-10-25 08:03:59

标签: c++ visual-studio constructor initializer-list

#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;

}

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

2 个答案:

答案 0 :(得分:3)

您收到错误是因为您尝试从聚合初始化列表初始化TDate。当类型具有私有成员时(例如,在您的情况下,IDvalid),则无法执行此操作。

您可以通过从三个int并使用TDate t1, t2, t3(1, 2, 3)为您的结构提供构造函数来解决此问题。

答案 1 :(得分:1)

要做Set chosenfolder = CreateObject("shell.application").BrowseForFolder(0,"Select a folder",0) ,你必须使用三个参数来构造TDate的构造函数,如下所示:

t3={ 1, 2, 3 };

并使用以下方法实现:

TDate(int i, int i1, int i2);

如果您不想创建构造函数,则创建如下对象:

TDate::TDate(int i, int i1, int i2) {

}