Доступ к методам после ошибки наследования - PullRequest
0 голосов
/ 23 октября 2011

Я использую наследование для своего кода.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;

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Что такое тип changeList?

Хотя вы создали объект производного класса, я подозреваю, что вы помещаете его в контейнер базового класса. Возможно, перед этой ошибкой вы также получаете несколько предупреждений из-за помещения производного объекта в контейнер типа base.

Если вы хотите создать контейнер базового класса и вставить объекты производного класса, вам нужно работать с указателями на объекты, а не на сами объекты.

0 голосов
/ 23 октября 2011

Где твой класс ChangeDutyRequest?Вы не показываете это.Может быть, вы забыли унаследовать его от правильной базы или вызвать его неправильно?

Показать более полный пример кода

...