私は初めてテンプレートクラスを扱い、継承を使用するときにコンパイラが好きではないように見える理由を理解しようとしています。C++継承されたテンプレートクラスは基本クラスにアクセスできない
template <typename T>
struct xPoint2
{
T x;
T y;
xPoint2() { x = 0; y = 0; };
};
template <typename T>
struct xVector2 : xPoint2<T>
{
xVector2() { x = 0; y = 0; };
};
コンパイラの出力:
vector2.hh: In constructor ‘xVector2<T>::xVector2()’:
vector2.hh:11: error: ‘x’ was not declared in this scope
vector2.hh:11: error: ‘y’ was not declared in this scope
が、このようにテンプレートを使用することはできませんここで
コードはありますか?あなたがthis->x
とthis->y
を使用して、コンパイラを手助けする必要が
おかげ
は、クラスのコンストラクタで初期化子ではなく、割り当てを使用することを検討してください。 – aschepler
この場合、ベースクラスctorを呼び出すこともできます。 – Christoph
@Christoph:より正確に言えば、あなたはいつもそのような呼び出しを書くかどうかにかかわらず、基本クラスの呼び出しを行います。だからこのコードでは、 'xVector2()'の代入は冗長です - それらはすでにベースコンストラクタによってゼロに設定されています。 – aschepler