0

こんにちは、ありがとうございます。

これが私の問題です。私はこれらのクラスを持っています:

-class Date -class Contract -class Employee -class Node -class List

すべてのクラスは、このクラス BaseObject から派生します。次のコードがあります。

#ifndef BASEOBJECT_H
#define BASEOBJECT_H
#include<iostream>
using namespace std;

class BaseObject{
public:
virtual string toString() const=0;
virtual BaseObject* clone() const=0;
};

ostream& operator << (ostream&, objetoBase&);


#endif  /* BASEOBJECT_H */

それだけです。演算子 << の実装をスキップしています。では、その考え方を説明します

クラス Date には要素属性 (int 日、int 月、int 年) しかありません。クラス コントラクトには 2 つのクラス Date ポインターがあるため、コントラクトはコンポジションによって Date に関連付けられます。クラス Employee には、ポインタで処理される 1 つの契約との関連付けがあります。

クラス Node には 2 つの属性があります。1 つ目は、Data という ObjectBase インスタンスを含む Node へのポインターであり、2 つ目は、nextNode と呼ばれる別の Node インスタンスへのポインターです。

Class List は、単純なリストでノード ポインターを処理します。

私の質問: リストで Employee を探していて、Find() 関数を使用して Node に含まれるデータにアクセスすると、BaseObject で作成されたメソッドだけが表示されるようになりました! どうすればこれを解決できますか? コードはあなたに任せます。最初と現在はノードです。

BaseObject * List :: find (string id) {
        if (first == NULL)
            return NULL;
        else
        if (first-> getData () -> == getId() id) //This line is underlined in compiler
            return first-> getData ();
        else {
            current = first;
        if (current-> getNextNode () == NULL)
            return NULL;
        else {
        while (current-> getNextNode () -> getNextNode ()! = NULL && Current-> getNextNode () -> getData () -> getId ()! = id) {
            current = current-> getNextNode ();}
        if (current-> getNextNode () -> getData () -> getId () == id)
            return current-> getNextNode () -> getData ();
        else
            return NULL;
        }
    }
}

下線付きのコードでエラーが発生します。コンパイラを使用して「->」記号を付けると、BaseObject メソッドの Clone() と toString() のみが表示され、Employees メソッドを使用したいのですが、これは現在、Employee インスタンスを持つ BaseObject ポインタになっています。

うまく表現できたら助けてください。

4

1 に答える 1