0

こんにちは私はTourクラスを持ってGuidedTourいますTour。私は自分のコードで次のことをしています:

Tour* t;

if(x) {

    t = new Tour(...);
}
else {

    t = new GuidedTour(...);
}

ただし、次のことを行うと、

t->getDate();

(getDate()GuidedTourクラス固有)

次のエラーが表示されます

'class Tour' has no member named 'getDate'

このメソッドを呼び出すにはどうすればよいですか?

4

4 に答える 4

2

あなたは付け加えられます

virtual Date GetDate() { throw std::exception("unimplemented"); }

クラス Tour に追加し、GetDate を GuidedTour で仮想化します。以下をキャストすることもできます。

dynamic_cast<GuidedTour*>(t)->GetDate()
于 2013-10-09T12:27:22.547 に答える
0

問題は、t を Tour として宣言したことにあります。後で GuidedTour としてインスタンス化しても、Tour には getDate() 関数がないため、エラーが発生します。最初に GuidedTour としてキャストすることで呼び出すことができます:

GuidedTour *tAsGuidedTour = dynamic_cast<GuidedTour*>(t)
if (tAsGuidedTour != NULL)
{
   tAsGuidedTour->getDate();
}

編集:理解を深めるためにhttp://www.cplusplus.com/doc/tutorial/typecasting/を読むことができます

于 2013-10-09T12:33:04.400 に答える