我带来了3个版本的代码,第一个导致编译错误,第二个和第三个编译成功。
我创建的类Bottom
是Middle
中的嵌套类,它是模板类Top
中的嵌套类
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);
^
与代码1类似,但Top
是普通类(非模板)
struct Top {
struct Middle {
struct Bottom {};
};
void useclass(Middle::Bottom);
};
此代码编译成功,没有任何错误
与代码1相似,但方法useclass
采用Middle
代替Bottom
template <class>
struct Top {
struct Middle {
struct Bottom {};
};
void useclass(Middle);
};
此代码也已成功编译
请告诉我:
为什么无法编译代码1,哪个C ++规则阻止编译?
有没有办法在模板类的嵌套类中使用嵌套类,如Bottom
作为类型?
答案 0 :(得分:1)
我刚刚解决了这个问题,我需要在代码1中的typename
之前放置Middle::Bottom
,然后才能成功编译。
template <class>
struct Top {
struct Middle {
struct Bottom {};
};
void useclass(typename Middle::Bottom);
};
P.S。我仍然希望得到更多细节的答案,例如:为什么编译器无法将Middle::Bottom
识别为没有关键字typename
的类型?