web-dev-qa-db-ja.com

エラーC2440: '初期化中': '初期化子リスト'から変換できません

#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が発生する理由: 'initializing': 'initializer-list'から 'TDate'および2 IntelliSenseに変換できません:初期化子の値が多すぎます。 bool validとint IDを削除すると、プログラムは機能しますが、なぜですか?

8
Fatima Rashid

集計初期化リストからTDateを初期化しようとしているため、エラーが発生しています。これは、型にプライベートメンバー(たとえば、IDvalid)がある場合は実行できません。

これを回避するには、3つのintsから構造体のコンストラクタを提供し、TDate t1, t2, t3(1, 2, 3)を使用します。

3
Oblomov

行うにはt3={ 1, 2, 3 };次のように、3つの引数を取るTDateのコンストラクタを作成する必要があります。

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

そしてそれを使用してそれを実装します:

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

}

コンストラクタを作成したくない場合は、次のようなオブジェクトを作成します。

TDate t1 = TDate();
1
vishal