错误:无法在没有对象的情况下调用成员函数

Error: Cannot call member function without object

本文关键字:情况下 调用 成员 函数 对象 错误      更新时间:2023-10-16

我在编译此代码时遇到问题:

#include <iostream>
#include <vector>
using namespace std;
class Class1
{   
    public:
        string m_Ime;
        Class1(const string ime);
};
Class1::Class1(string const ime):
    m_Ime(ime)
{}
class Class2
{
    public:
        vector <Class1> m_Class1;
        Class2(int mesta);
        void RollCall();
        void Add(const Class1& aClass1);
};
Class2::Class2(int mesta)
{
    m_Class1.reserve(mesta);
}
void Class2::RollCall()
{
    for(int x = 0; x < m_Class1.size(); x++){
        cout << m_Class1[x].m_Ime << endl;
    }
    
}
void Class2::Add(const Class1& aClass1)
{
    m_Class1.push_back(aClass1);
}
int main(){
    Class2 skupina (3);
    
    Class2::Add(Class1 ("Prvi"));
    Class2::Add(Class1 ("Drugi"));
    Class2::Add(Class1 ("Tretji"));
    
    skupina.RollCall();
    
    return 0;
}

这只不过是我试图学习聚合的基础知识。但是,在尝试编译代码时,它给了我以下错误:

在函数 'int main()' 中:

46 29 [错误] 无法在没有对象的情况下调用成员函数 'void Class2::Add(const Class1&)'

47 30 [错误] 无法在没有对象的情况下调用成员函数 'void Class2::Add(const Class1&)'

48 31 [错误] 无法在没有对象的情况下调用成员函数 'void Class2::Add(const Class1&)'

即使我实例化 3 个 Class1 类型的对象,然后用它们作为参数调用 Add 函数,同样的错误仍然存在。

成员函数在实例上运行。但是,要指定成员函数将对其进行操作的实例,您需要在该实例上调用该函数。

为此,请使用计算

结果为该实例的表达式(例如,已声明的自动变量),而不是类名:

skupina.Add(...);

现在,成员函数将知道要对哪个实例进行操作。

你需要:

skupina.Add(Class1 ("Prvi"));
skupina.Add(Class1 ("Drugi"));
skupina.Add(Class1 ("Tretji"));

而不是:

Class2::Add(Class1 ("Prvi"));
Class2::Add(Class1 ("Drugi"));
Class2::Add(Class1 ("Tretji"));

请考虑以下事项:

Class2 skupina1 (3);
Class2 skupina2 (3);
Class2::Add(Class1 ("Prvi"));

编译器如何知道应该在哪个对象(skupina1skupina2)上调用Add方法?

您需要明确地说出要向哪个对象Add某些内容:skupina1.Add(Class1("Prvi"));skupina2.Add(Cass1("Prvi"));