web-dev-qa-db-fra.com

erreur C2440: 'initialisation': impossible de convertir depuis '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;

}

pourquoi je reçois l'erreur 1 erreur C2440: 'initialisation': impossible de convertir de 'initializer-list' en 'TDate' et 2 IntelliSense: trop de valeurs d'initialiseur. Quand je supprime bool valide et int ID, les programmes fonctionnent. Pourquoi est-ce le cas?

5
Fatima Rashid

Vous obtenez l'erreur parce que vous essayez d'initialiser une TDate à partir d'une liste d'initialisation globale. Cela ne peut pas être fait lorsque le type a des membres privés (tels que, dans votre cas, ID et valid).

Vous pouvez contourner ce problème en fournissant un constructeur pour votre structure à partir de trois int et en utilisant TDate t1, t2, t3(1, 2, 3).

3
Oblomov

Pour faire t3={ 1, 2, 3 };, vous devez créer un constructeur de TDate avec trois arguments, comme ceci:

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

et l'implémenter en utilisant:

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

}

si vous ne voulez pas créer de constructeur, créez un objet comme ceci:

TDate t1 = TDate();
1
vishal