2015-04-17 60 views
-1

错误:无法调用成员函数不编译这个代码时,我有一个问题对象

#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; 
} 

没什么比我努力学习聚集的基础知识多。然而试图编译代码时,它给了我下面的错误:

In function 'int main()':

46 29 [Error] cannot call member function 'void Class2::Add(const Class1&)' without object

47 30 [Error] cannot call member function 'void Class2::Add(const Class1&)' without object

48 31 [Error] cannot call member function 'void Class2::Add(const Class1&)' without object

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

回答

3

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

要做到这一点,而不是类名称,使用其计算到该实例的表达式(例如,你声明的自动变量):

skupina.Add(...); 

现在的成员函数就会知道哪些实例操作。

2

你想:

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"));

+0

这应该补充答案:http://www.cplusplus.com/doc/tutorial/operators/ – Kyborek

相关问题