2011-10-23 48 views
0

我爲我的代碼使用繼承。 ChangeRequest是我的基類。代碼如下。繼承錯誤後訪問方法

ChangeRequest.h

#include <iostream> 
#include <string> 

using namespace std; 

class ChangeRequest 
{ 
int swapDay; 
int newDay; 
public: 
void setSwapDay(int newDay); 
int getSwapDay(); 

void setNewDay(int newDay); 
int getNewDay(); 

};

ChangeRequest.cpp

#include "ChangeDutyRequest.h" 

void ChangeRequest::setSwapDay(int newDay) 
{ 
    swapDay = newDay; 
} 

int ChangeRequest::getSwapDay() 
{ 
    return swapDay; 
} 

void ChangeRequest::setNewDay(int day) 
{ 
    newDay = day; 
} 

int ChangeRequest::getNewDay() 
{ 
    return newDay; 
} 

在下面的代碼是派生類。 SwapDuty SwapDuty.h

#include <iostream> 
#include <string> 
#include "ChangeRequest.h" 

using namespace std; 

class SwapDuty: public ChangeRequest 
{ 
    string requester; 
    public: 
    void setRequester(string member); 
    string getRequester(); 
}; 

SwapDuty.cpp

#include "SwapDuty.h" 

    void SwapDuty::setRequester(string member) 
    { 
     requester = member; 
    } 

    string SwapDuty::getRequester() 
    { 
     return requester; 
    } 

當我編譯並訪問使用getRequester()請求者屬性。我收到以下錯誤。

'class ChangeRequest' has no member named 'getRequester' 

這是我用我的代碼

有人可以告訴我什麼,我做錯了什麼?在此先感謝

SwapDuty newSwapDutyRequest; 
     for(int i = 0; i < tempList.size(); i++) 
     { 
      if(tempList[i].getPersonToPerform().getName() == loginMember) 
      { 
       newSwapDutyRequest.setRequester(loginMember); 
       newSwapDutyRequest.setSwapDay(swapDay); 
       newSwapDutyRequest.setNewDutyDay(daySwapWith); 
       break; 
      } 
     } 
     changeList.push_back(newSwapDutyRequest); 

cout << changeList[1].getRequester() << endl; 

回答

1

什麼是changeList類型?

雖然您已經創建了派生類的一個對象,但我懷疑您是將它推入基類的容器中。可能在這個錯誤發生之前,你也會得到一些警告,因爲將派生的對象推入類型爲base的容器中。

如果你想創建一個基類的容器並推入派生類對象,你需要使用指向對象的指針而不是對象本身。

+0

+在'ChangeRequest'類中聲明純虛函數'getRequester' –

0

你的班級在哪裏ChangeDutyRequest?你不顯示它。也許你忘了從正確的基礎繼承它或錯誤地調用它?

顯示更全面的代碼示例

+0

不好意思ChangeDutyRequest是ChangeRequest我錯誤地鍵入了代碼。 – Peter

+0

但'ChangeRequest'沒有'getRequester'方法。用'SwapDuty'繼承它不會將方法添加到基類,只有子類 - 你明白嗎? – zaharpopov

+0

我創建的對象來自SwapDuty類,我要求getRequester,它給了我這個錯誤。但SwapDuty具有請求者屬性。 – Peter