【问题标题】:Method could not be resolved方法无法解决
【发布时间】:2012-10-11 14:23:27
【问题描述】:

在我的头文件中:

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

代码根本无法编译。如果对象是用上面代码中的同一个类创建的,为什么找不到方法?

【问题讨论】:

    标签: c++ oop methods


    【解决方案1】:

    esame3() 不调用默认构造函数。在你的情况下,编译器认为你已经声明了一个 method

    应该是

    Esame esame3;

    或

    Esame esame3=Esame();

    使用new 创建一个对象会创建一个动态分配的对象..

    在这种情况下,您的班级必须是这样的pointer

    Esame *esame3=new Esame;

    您必须使用-> 而不是. 来访问成员方法或变量..

    esame3->method1();
    esame3->varable1;
    

    【讨论】:

    • 你的第二个例子Esame esame3=Esame() 与你第一句话的意思相矛盾。
    • 您是说“Esame() 不调用默认构造函数”但它确实调用了(在您发布的示例中)。
    • @LuchianGrigore 我希望它是一个对象而不是类..esame3..;)
    • 如果你想使用“new”创建对象怎么办?
    • 对不起,我从 Java 切换到 C++:我们在那里执行 Esame esame3= new Esame()。根据您所说,您不能使用 new 运算符来创建该类的对象。
    【解决方案2】:

    Esame esame3(); 是一个函数声明。 esame3 在这种情况下没有命名对象。它声明了一个名为esame3 的函数,它不接受任何参数并返回一个Esame 类型的对象。

    这称为most vexing parse。

    要使用默认构造函数创建对象,请使用Esame esame3;(无括号):

    Esame esame3;
    esame3.setVoto(26); 
    esame3.stampaEsame();
    

    【讨论】:

    • 太好了,成功了。只是另一个相关问题:如果我想使用 new 关键字创建 Esame 类的对象怎么办?
    • @Hoconosc 在这种情况下,您可以使用括号(它们是可选的),但这是因为它不能被视为声明。
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2021-12-21
    • 2017-09-30
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多