2011-10-23 51 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