ベースクラスのインクルードディレクティブを設定する方法があるかどうかを理解しようとしていますが、ベース以外のヘッダーで定義されている派生クラスクラス。例えば:GenericObject.hでベースクラスヘッダーのみが含まれている場合のアクセス派生クラス
:Ball.hで
class GenericObject {
/* whatever - shared properties and methods implemented in .cpp file */
}
:
他のいくつかの実装ファイルで今すぐclass Ball : public GenericObject {
/* whatever - implementation details are in the .cpp file */
}
(のはmain.cppにそれを呼びましょう)、私は#include
を持っていますd "GenericObject.h"
。 main.cppでは、GenericObjectクラスのメンバーだけでなく、BallクラスやGenericObjectの他の派生クラスの両方にアクセスできるようにしたいと考えています。これまでの試行から、Ball * b;
のように宣言しようとすると、コンパイラはボールの識別子を認識しないため、そのクラスに属するメンバーのいずれかが認識されます。
これは私の#include
のd "GenericObject.h"
ファイルが私にアクセスするこの派生したボールクラスがリンクされていないためですか? "#include "Ball.h"
の場合、Ballクラスを正しく識別して使用できますが、GenericObjectクラスの派生クラスのヘッダーファイルをすべて含める必要があるとは思いませんか?
これがどのように機能するかを推測しなければならない場合は、GenericObjectクラスのBallクラスのプロトタイプ宣言のようなものが正しい方向のステップになると思いますが、クラスのプロトタイプも事である。
フィードバックをお寄せいただきありがとうございます。
[*翻訳単位*](https://en.wikipedia.org/wiki/Translation_unit_(プログラミング))の概念を学ぶ必要があります。簡略化された翻訳単位は、単一のソースファイルとそのすべてのヘッダファイルです。正しいヘッダーファイルが含まれていない場合、コンパイラはそのヘッダーファイルで宣言し定義したシンボルを単に知ることができません。 –
私はこれが当てはまると思っていたと言いましたが、私は何か明白なアプローチや別の最適なアプローチを見逃していないことを確認したかったのです。ありがとう、結構です! –