2017-03-07 25 views
-5

私は仮想関数からプライベート派生クラスメソッドを呼び出そうとしていますが、仮想関数から派生クラスの関数を呼び出す方法を見つけることができません。はC++のjavaの 'classname.this'に相当しますか?

これは私が別の.cppファイルで、この関数を定義するとき、私はゲームの中で宣言されたメソッドのいずれかにアクセスする方法を見つけ出すことはできません

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

Game.hでゲームクラスの仮想関数宣言がありますクラス。 Screenクラスから関数を呼び出すことしかできません。

私は(ここで、動きがゲームのクラスで定義されたプライベートメンバ関数であることを確認してください)この

Game::makeMove(1); 

よう

をものを試してみましたが、これはちょうど私にエラーを与える「非静的メンバ参照は、相対的でなければなりません特定のオブジェクトに。

申し訳ありません私の言葉/用語が少しばかり、私はまだC++にはかなり新しいです。私の経験のほとんどはjavaです。

+0

ファイルではなく、クラスを話す。一つのファイルでMCVEを作ることができます。 – LogicStuff

答えて

0

定義は実際にはGameクラスのonChar関数を定義していて、Screenクラスではないのですか?あなたが誤って(私は簡単に起こる可能性を想像することができます)onCharの定義としてこれを書いた場合:

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

は、あなたはクラスの画面で関数を定義しています。

0

あなたはコードの下のような静的を使用して行うことができます。

静的メンバ関数これらの関数は、全体としてではなく、クラスの 特定のオブジェクトのクラスのために働く

オブジェクトと直接メンバーアクセスを使用して呼び出すことができます。 オペレータ。しかし、より典型的なのは、 によって静的メンバー関数を呼び出すことで、クラス名とスコープ解決:: operatorを使用します。

例:

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

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

これらの関数は、通常のデータメンバとメンバ関数にアクセスするが、唯一の静的データメンバと静的メンバ関数ができません。

普通のメンバーにアクセスできない理由の「this」というキーワードはありません。

関連する問題