error C2440: 'initialisation' : impossible de convertir de 'initialiseur-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 j'obtiens une Erreur 1 error C2440: 'initialisation' : impossible de convertir de 'initialiseur-liste" à "TDate' et 2 IntelliSense: trop d'initialiseur de valeurs. Quand j'enlève bool valide et int ID les programmes de travaux.Pourquoi est-il si?
J'aime ce C++ moderne façon d'initialisation, mais a constaté que dans MSVS 2015, il ne fonctionnera pas si vous avez struct champs initialiseurs comme
struct TDate { int day = 0; };
alors que celui-ci fonctionne struct TDate { int day; };
OriginalL'auteur Fatima Rashid | 2015-10-25
Vous devez vous connecter pour publier un commentaire.
Vous obtenez l'erreur parce que vous essayez d'initialiser une
TDate
à partir d'un agrégat liste d'initialisation. Cela ne peut être fait quand le type a de membres privés (tels que, dans votre cas,ID
etvalid
).Vous pouvez contourner ce problème en fournissant un constructeur pour votre structure de trois
int
s et à l'aide deTDate t1, t2, t3(1, 2, 3)
.OriginalL'auteur Oblomov
Faire
t3={ 1, 2, 3 };
vous avez à faire, le constructeur de TDate avec prend trois arguments, comme ceci:et de mettre en œuvre à l'aide de:
si vous ne voulez pas créer constructeur, puis créer un objet comme ceci:
OriginalL'auteur vishal