2013-02-08 41 views
2

我无法在另一个类中访问一个类的成员函数,但我可以在main()中很好地访问它。我一直在尝试切换,但我无法理解我做错了什么。任何帮助,将不胜感激。如何访问另一个类中的一个类的成员函数?

这里是生成该错误的行:

cout << "\n\nRetrieve key from inside Envelope class: " << e.getData() << "\n\n"; 

这里是代码:

class Record{ 
    private: 
    string key; 
    public: 
    Record(){ key = ""; } 
    Record(string input){ key = input; } 
    string getData(){ return key; } 
    Record operator= (string input) { key = input; } 
}; 

template<class recClass> 
class Envelope{ 
    private: 
    recClass * data; 
    int size; 

    public: 
    Envelope(int inputSize){ 
     data = new recClass[inputSize]; 
     size = 0; 
    } 
    ~Envelope(){ delete[] data; } 
    void insert(const recClass& e){ 
     data[size] = e; 
     cout << "\n\nRetrieve key from inside Envelope class: " << e.getData() << "\n\n"; 
     ++size; 
    } 
    string getRecordData(int index){ return data[index].getData(); } 
}; 

int main(){ 

    Record newRecord("test"); 
    cout << "\n\nRetrieve key directly from Record class: " << newRecord.getData() << "\n\n"; 

    Envelope<Record> * newEnvelope = new Envelope<Record>(5); 
    newEnvelope->insert(newRecord); 
    cout << "\n\nRetrieve key through Envelope class: " << newEnvelope->getRecordData(0) << "\n\n"; 

    delete newEnvelope; 
    cout << "\n\n"; 
    return 0; 
} 
+0

什么是错误讯息? – 0x499602D2

回答

6

你传入e作为一个恒定的参考void insert(const recClass& e){
然后要调用方法(getData())未声明为常量。

您可以通过重写getData()这样的修正:

string getData() const{ return key; } 
+1

真棒,谢谢,它工作。一些如此简单。 – reformed

+0

@reformed有时候,它可能并不那么简单,特别是在模板中。 –

5

您必须声明getData()const所以它可以从一个const上下文中调用。你insert功能需要const recClass& e所以你要做到这一点在Record

string getData() const { return key; } 
相关问题