我通过网络搜索了一个没有找到任何解释为什么会发生以下事件。如何从封闭模板类访问嵌套类的方法和字段?
例如,有一个模板类用嵌套类嵌套。
在Enclosing类中,有一种方法应该创建一个嵌套类的实例并使用它的字段和方法。
在下面的代码,有一个如何我试图做到这一点的模型:
template<typename T, typename S>
class Enclosing{
public:
class Nested;
Nested foo();
};
template<typename T, typename S>
class Enclosing<T,S>::Nested{
public:
T field;
void some_method();
friend class Enclosing; // instead of this line I also tried:
// friend class Enclosing<T,S>
// and it didn't work either
};
template<typename T, typename S>
typename Enclosing<T,S>::Nested Enclosing<T,S>::foo(){
Nested nes;
nes.some_method; // the problem appears here
return enc;
}
的问题是:
当我在写nes.some_method
,没有环境的我尝试过(VS2010,日食),在我输入“nes。”之后,并没有向我提供任何选项。我好像“内斯”根本就不是这个阶级的典范。
如何从封闭模板类访问嵌套类的方法和字段?
我真的很想知道它是什么导致人们频繁发生此错误。我真的永远都不会记得这样做,但有人几乎每天都会发布这个消息。 – 2013-05-10 15:42:55
@RyanWitmer类的默认构造函数不接受任何参数,所以初学者通常会误解他们在实例化对象时调用默认构造函数。它的语法也类似于调用专门的构造函数,这增加了混淆。 – 0x499602D2 2013-05-10 15:44:14
我只是试图删除括号,它仍然不起作用。 – Grinch 2013-05-10 15:57:18