2017-03-07 59 views
-5

我想從虛函數調用一個私有派生類的方法,但我無法弄清楚如何從虛函數中調用派生類的函數。是否有相當於從C++中的java'classname.this'?

這是遊戲類的虛函數聲明中Game.h

virtual void Screen::KeyListener::onChar(char c); 

當我定義在不同的.cpp文件這個功能我無法弄清楚如何訪問任何在遊戲中聲明的方法類。我只能從Screen類調用函數。

我曾嘗試這樣的東西

Game::makeMove(1); 

(其中做出此舉是遊戲類中定義的私有成員函數)

但這只是給我的錯誤「的非靜態成員引用必須是相對的到一個特定的對象。「

對不起,如果我的措辭/術語有點關閉,我還是相當新的C++。我的大部分經驗是用java。

+0

說出類,而不是文件。你可以用一個文件製作一個MCVE。 – LogicStuff

回答

0

你確定這個定義實際上是在class Game中定義函數onChar,而不是在類Screen中定義的嗎?如果你不小心把它寫成了onChar的定義(我可以想象它很容易發生):

void Screen::KeyListener::onChar(char c) {} 

然後你在類Screen中定義函數。

0

您可以使用靜態不喜歡下面的代碼:

靜態成員函數

這些功能的類工作作爲一個整體,而不是一類的 特定對象。

它可以使用對象和直接成員訪問進行調用。 運營商。但是,使用類名稱和作用域分辨率::運算符來調用靜態成員函數本身更爲典型,它的本身是 。

實施例:

class X 
{ 
public: 
static void f(){}; 
}; 

int main() 
{ 
X::f(); // calling member function directly with class name 
} 

這些功能不能訪問普通數據成員和成員函數,但是隻有靜態數據成員和靜態成員函數。

它沒有任何「this」關鍵字,這是它無法訪問普通成員的原因。

相關問題