最近、親クラスでtypedef
編集されたC++ コードに出くわしました。struct
ただし、マークされていなくても、子クラスでは使用できないようですprivate
(だったprotected
)。この失敗を示す最小限の実例 (以下) を以下に作成しました。私はすべてを公開しましたが、それでも失敗します。与えられたエラーは(を使用してg++
)です:
B.h:8: error: expected ',' or '...' before '&' token
B.h.8: error: ISO C++ forbids declartion of 'Datum' with no type
ああ(コンパイル)
template<typename S, typename T> class A {
public:
typedef struct {
S x;
T y;
} Datum;
};
Bh (コンパイルしない)
#include "A.h"
template<typename Q> class B : public A<Q, Q> {
public:
void output(const Datum& dat);
};
Bh (コンパイル)
#include "A.h"
template<typename Q> class B : public A<Q, Q> {
public:
typedef struct {
Q x;
Q y;
} Datum;
void output(const Datum& dat);
};
B.h
の最初のバージョンがコンパイルされないのはなぜですか? 2番目のものは安全な代替手段ですか? これを処理するためのより良い(より簡潔または慣用的な)方法はありますか?