2

Zh

struct Z {
    Z();
    ~Z();
    void DoSomethingNasty();
}

Xh

struct X {
    X();
    ~X();
    void FunctionThatCallsNastyFunctions();
}

MainClass.h

#include "Z.h"
#include "X.h"

struct MainClass {
    MainClass();
    ~MainClass();
  private:
    Z _z;
    X _x;
}

X.cpp

X::FunctionThatCallsNastyFunctions() {
  //How can I do this? The compiler gives me error.
  _z.DoSomethingNasty();
}

オブジェクトDoSomethingNasty()から関数を呼び出すにはどうすればよいですか?_z

4

2 に答える 2

4

クラス_z内に存在しないため、コンパイラはエラーを出しています。クラスX内に存在します。からオブジェクトMainClassのメソッドを呼び出したい場合は、独自のオブジェクトを指定するか、パラメータとして渡す必要があります。これらのどれが適切かは、何をしようとしているのかによって異なります。ZXXZ

あなたの混乱はこれかもしれないと思います.メンバーとメンバーのMainClass両方があるので、お互いにアクセスできるはずだと思います. それはそれがどのように機能するかではありません。はそれらの両方にアクセスできますが、メンバー関数内のおよびオブジェクトは、自身のクラスの外部について何も認識しません。XZMainClass_x_z

于 2010-08-21T19:46:46.377 に答える
0

あなたはコンパイラエラーを提供しませんでしたが、サンプルから、DoSomethingNasty 関数を宣言しただけで定義しなかったため、コンパイラエラーが発生したと推測しています。これにより、リンク時にエラーが発生します。

次のコードを .cpp ファイルに追加してみてください

void Z::DoSomethingNasty() {
  // Code here
}

さらに、@Tyler が指摘したように、X クラスには_z、関数を呼び出すための名前が付けられたメンバー変数がありません。

于 2010-08-21T19:46:25.970 に答える