在我的标题文件中:
Esame();
Esame(string);
Esame(string, Voto);
这是一个c ++测试者类:
//OK
Esame esame("Algoritmi e strutture dati", 30);
esame.stampaEsame();
//OK
Esame esame2("Metodi Avanzati di Programmazione");
esame2.setVoto(26);
esame2.stampaEsame();
//ERROR
Esame esame3();
esame3.setVoto(26); //Method could not be resolved
esame3.stampaEsame(); //Method could not be resolved
代码根本不编译。如果在上面的代码中使用相同的类创建了对象,为什么它找不到方法?
答案 0 :(得分:3)
esame3()
不会调用默认构造函数。在您的情况下,编译器认为您已声明方法
应该是
Esame esame3;
或强>
Esame esame3=Esame();
使用new
创建对象将创建一个动态分配的对象。
在这种情况下,您的课程必须是pointer
这样的
Esame *esame3=new Esame;
您必须使用->
代替.
来访问成员方法或变量。
esame3->method1();
esame3->varable1;
答案 1 :(得分:1)
Esame esame3();
是一个函数声明。在这种情况下,esame3
没有命名对象。它声明了一个名为esame3
的函数,该函数不接受任何参数并返回Esame
类型的对象。
要使用默认构造函数创建对象,请使用Esame esame3;
(无括号):
Esame esame3;
esame3.setVoto(26);
esame3.stampaEsame();