我最近在父类中遇到了一些 C++ 代码typedef
。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
无法编译?第二个是安全的选择吗?有没有更好(更简洁或惯用)的方法来处理这个问题?