我带了3个版本的代码,第一个导致编译错误,第二个和第三个成功编译。
代码1:
我创建的类是Bottom
中的嵌套类,它是模板类Middle
中的嵌套类
template <class>
struct Top {
struct Middle {
struct Bottom {};
};
void useclass(Middle::Bottom);
};
这段代码给出了一个错误:
main.cpp:6:27: error: 'Top::Middle::Bottom' is not a type
void useclass(Middle::Bottom);
^
代码2:
与代码1相似,但
Top
是普通类(非模板)struct Top {
struct Middle {
struct Bottom {};
};
void useclass(Middle::Bottom);
};
此代码已成功编译,没有任何错误
代码3:
与代码1相似,但方法
Top
采用useclass
代替Middle
template <class>
struct Top {
struct Middle {
struct Bottom {};
};
void useclass(Middle);
};
该代码也已成功编译
请告诉我:
为什么无法编译代码1,哪个C ++规则阻止其被编译?
有什么方法可以将像
Bottom
这样的模板类的嵌套类中的嵌套类用作类型? 最佳答案
我只是把它弄清楚了,我需要在代码1中的typename
之前放置Middle::Bottom
,它将成功编译。
template <class>
struct Top {
struct Middle {
struct Bottom {};
};
void useclass(typename Middle::Bottom);
};
附言我仍然希望获得更多详细信息的答案,例如为什么编译器不能将
Middle::Bottom
识别为没有关键字typename
的类型?