2011-10-23 13 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のタイプは何ですか?

派生クラスのオブジェクトを作成しても、それを基底クラスのコンテナにプッシュすると思われます。派生したオブジェクトを型のコンテナにプッシュするので、おそらくこのエラーの前にいくつかの警告を受け取っている可能性があります。

基本クラスのコンテナを作成し、派生クラスオブジェクトをプッシュする場合は、オブジェクト自体ではなくオブジェクトへのポインタを操作する必要があります。

+0

+ 'ChangeRequest'クラスで純粋な仮想関数' getRequester'を宣言してください –

0

クラスChangeDutyRequestはどこですか?あなたはそれを表示しません。正しいベースから継承したり、間違って呼び出すのを忘れたのかもしれません。

フルラコードサンプルを表示

+0

申し訳ありませんChangeDutyRequestはChangeRequestです。コードを間違って入力しました。 – Peter

+0

しかし、 'ChangeRequest'には' getRequester'メソッドはありません。 'SwapDuty'でそれを継承しても、そのメソッドは基本クラスには追加されず、子クラスのみが追加されます。 – zaharpopov

+0

私が作成するオブジェクトはSwapDutyクラスからのもので、getRequesterを呼び出すとこのエラーが出ます。しかし、SwapDutyには依頼者属性があります。 – Peter

関連する問題