我发现自己具有嵌套类和具有相同名称的成员函数。该成员函数旨在返回嵌套类的一个实例:具有相同名称的嵌套类和成员函数
class Foo
{
public:
class Lock
{
// Operations that require the lock...
};
Lock Lock() noexcept {return Lock;}
};
这种理解没有工作,所以我一直在寻找办法解决它,并试图:
return typename Foo::Lock();
这对于g工作得很好++ 4.7和4.8,但是当上铛++ 3.4运行我得到的错误:
没有C++ 11:error: typename specifier refers to non-type member 'Lock' in 'Foo'
用C++ 11:'error: typename specifier refers to non-type member 'Lock' in 'Foo'
这导致我的问题:
- 其中哪些是正确的?
- 有没有办法在成员函数中引用嵌套类,如示例中所示?
感谢您的解决方法。至于正确性,如果你可以指向标准的相关部分,那将是非常好的:) – DrYap
我正要回答C++ 11草案标准草案中实际上正确的部分是'9.1'。 –
您可以使用'::'aswell访问类名称,而不仅仅是使用详细的类型说明符(标准说“当两个声明都在范围内”,这似乎是指“当名称可以使用不合格抬头”)。这是有效的:'Foo :: Lock :: bar();',如果'bar'是Lock嵌套类的成员函数。 –