错误:无法在没有对象的情况下调用成员函数
Error: Cannot call member function without object
我在编译此代码时遇到问题:
#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"));
编译器如何知道应该在哪个对象(skupina1
或skupina2
)上调用Add
方法?
您需要明确地说出要向哪个对象Add
某些内容:skupina1.Add(Class1("Prvi"));
或skupina2.Add(Cass1("Prvi"));
。
相关文章:
- 如果 std::vector::clear() 不是静态的,如何在没有实例的情况下调用它?
- C++ - 如何在不调用其属性的情况下调用类?
- C++ 在不释放内存的情况下调用析构函数
- Python在不引用类名的情况下调用类函数
- 为什么在这种情况下调用非常量右值移动构造函数?
- 是否可以在没有显式专用化的情况下调用可变参数模板函数?
- 使用按引用调用时,不能在没有对象的情况下调用成员函数 const
- 您可以在不调用构造函数的情况下调用攻击器吗?
- 命名空间:不能在没有对象的情况下调用成员函数
- 哪些语言将在没有显式桥接的情况下调用C++
- 如何在不重新索引顶点的情况下调用"boost::remove_vertex"?
- C :在没有对象实例的情况下调用非静态成员函数
- 在不实例化的情况下调用不同派生类的虚拟方法
- C 如何在没有错误的情况下调用void函数
- 在MSVC上的数组初始化期间,destructor在不复制或移动构造方的情况下调用
- 在不指定实例化的情况下调用类模板的静态方法的方法
- 为什么INVOKE总是取消引用数据成员,而不是在可能的情况下调用
- 是否可以在不实例化派生类的情况下调用该类的虚拟函数
- 无法在没有对象的情况下调用成员函数(尽管我相信我确实初始化了它)
- 为什么在没有赋值运算符的情况下调用转换构造函数