2010-12-19 49 views
21

如果我有一個嵌套類,如下所示:嵌套類定義的源文件

class MyClass 
    { 
    class NestedClass 
    { 
    public: 
     // nested class members AND definitions here 
    }; 

    // main class members here 
    }; 

目前,MyClass的定義是在CPP文件,但對於NestedClass的定義是在頭文件,也就是說,我無法聲明CPP文件中的函數/構造函數。

所以我的問題是,如何在cpp文件中定義NestedClass的功能?如果我不能,那是什麼原因(如果是這種情況,我對這種情況發生的原因有一個模糊的概念,但我想要一個很好的解釋)?結構呢?

回答

40

你可以。如果你的內部類等的方法:

class MyClass { 
    class NestedClass 
    { 
    public: 
     void someMethod(); 
    }; 

    // main class members here 
    }; 

...那麼你就可以在.cpp文件中定義它像這樣:

void MyClass::NestedClass::someMethod() { 
    // blah 
} 

結構幾乎同樣的事情,在C++類 - 只是默認爲他們的訪問「公共」。他們在所有其他方面都像對待課程一樣受到關注。

可以(如在評論中所指出)剛剛宣佈的內部類,如:

class MyClass { 
    class NestedClass; 
    // blah 
}; 

..和然後在實現文件中定義它:

class MyClass::NestedClass { 
    // etc. 
}; 
+0

你是什麼意思通過「不......像其他內心階層一樣」? – 2010-12-19 07:49:00

+0

@Alf:我在哪裏寫'不'? – sje397 2010-12-19 08:05:55

+0

對不起,我的眼睛顯然跨過了什麼。儘管如此,仍然想知道你最後一句話的意思。我的意思是,內部類不需要在外部類中定義(例如,普通的PIMPL習慣用語依賴於該類)。這看起來與你在最後一句中寫的內容矛盾,所以你的意思可能是別的而不是字面上寫的東西?乾杯, – 2010-12-19 08:32:49