在创建 class 定义时使用 class 类型作为模板参数类型
Using class type as template argument type when create class definition
我有一个基础 class BaseCmd,例如:
template<typename T>
class BaseCmd {
public:
private:
T m;
};
然后导出classcmd1:
class Cmd1 : public BaseCmd<Cmd1::A> {
public:
struct A {
int c, d;
};
};
但出现错误:
error: incomplete type ‘Cmd1‘ used in nested name specifier
甚至可以这样定义吗?谢谢。
在 Cmd1
完成之前,您不能拥有 Cmd1::A
类型的成员。简单的解决方法是在 Cmd1
之外定义 A
。但是,如果出于某种原因你想在 Cmd1
中定义 A
,你可以像这样添加一个中间层:
template<typename T>
class BaseCmd {
public:
private:
T m;
};
class Cmd1 {
public:
struct A {
int c, d;
};
struct impl : public BaseCmd<A> {};
};
Cmd1::impl
可以从 A
继承,因为 A
的定义在 BaseCmd<A>
用作基数 class 时已经完成。
我有一个基础 class BaseCmd,例如:
template<typename T>
class BaseCmd {
public:
private:
T m;
};
然后导出classcmd1:
class Cmd1 : public BaseCmd<Cmd1::A> {
public:
struct A {
int c, d;
};
};
但出现错误:
error: incomplete type ‘Cmd1‘ used in nested name specifier
甚至可以这样定义吗?谢谢。
在 Cmd1
完成之前,您不能拥有 Cmd1::A
类型的成员。简单的解决方法是在 Cmd1
之外定义 A
。但是,如果出于某种原因你想在 Cmd1
中定义 A
,你可以像这样添加一个中间层:
template<typename T>
class BaseCmd {
public:
private:
T m;
};
class Cmd1 {
public:
struct A {
int c, d;
};
struct impl : public BaseCmd<A> {};
};
Cmd1::impl
可以从 A
继承,因为 A
的定义在 BaseCmd<A>
用作基数 class 时已经完成。