我發現自己具有嵌套類和具有相同名稱的成員函數。該成員函數旨在返回嵌套類的一個實例:具有相同名稱的嵌套類和成員函數
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嵌套類的成員函數。 –