J'apprends le C++ en ce moment et j'écris un programme qui utilise la liste des initialisateurs de membres. Voici le code avec lequel je travaille :
#include <cstdio>
struct ClockOfTheLongNow {
ClockOfTheLongNow() {
year = 2019;
}
void add_year() {
year++;
}
bool set_year(int new_year) {
if (new_year < 2019) return false;
year = new_year;
return true;
}
int get_year() const {
return year;
}
private:
int year;
};
struct Avout{
Avout(const char* name, long year_of_apert) : name{ name }, apert{ year_of_apert } {
}
void announce() const {
printf("My name is %s and my next apert is %d.\n", name, apert.get_year());
}
const char* name;
ClockOfTheLongNow apert;
};
int main() {
Avout raz{ "Eramas", 3010 };
Avout jad{ "Jad", 4000 };
raz.announce();
jad.announce();
}
L'erreur que je reçois provient de cette ligne où il est écrit apert{ year_of_apert } :
Avout(const char* name, long year_of_apert) : name{ name }, apert{ year_of_apert } {
L'erreur que je reçois en retour est la suivante :
no instance of constructor "ClockOfTheLongNow::ClockOfTheLongNow" matches the argument list -- argument types are: (long)
J'ai déjà essayé de chercher des solutions au problème mais, jusqu'à présent, je n'ai pas eu de chance. Le résultat attendu est censé être le suivant :
My name is Erasmas and my next apert is 3010.
My name is Jad and my next apert is 4000.