こんにちは、ありがとうございます。
これが私の問題です。私はこれらのクラスを持っています:
-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 ポインタになっています。
うまく表現できたら助けてください。