2014-04-07 201 views
0

爲什麼the following code無法正常工作?爲什麼派生類不能訪問基類靜態方法?

class A 
{ 
    static void Method() { std::cout << "method called."; } 
}; 

class B : public A 
{ 
    // Has a bunch of stuff but not "Method" 
}; 

int main() 
{ 
    B::Method(); 
} 

我知道我可以使它通過添加以下到B的工作,但是這將是很好,如果這是沒有必要的,尤其是如果有從A派生幾類

static void Method() { A::Method(); } 
+1

@jthill你是對的。如果它是公開的,它工作得很好。謝謝。 – sgryzko

回答

4

默認情況下,使用class密鑰聲明的類的成員是私有的。爲了讓它們公開,你必須說:

class A 
{ 
    public: 
// ^^^^^^^ 
     static void Method() { cout << "method called."; } 
}; 
+0

我的問題已被編輯。即使明確公開,我仍然無法訪問此方法。 – sgryzko

+0

你的意思是在'main'中調用'B :: Method'而不是'derived :: Method' – vogomatix

+0

@SteveJessop你說得對。我的錯。錯誤已被修復。 – sgryzko

相關問題