#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?
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)
.
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();