0

lasse1のインスタンスがあり、それをlasse2のメソッドで使用したいのですが、このメソッドは静的メソッドですが、これは機能しません。

 class Lasse2{
 ......
public :
static void function(void);
Lasse1* obj;
........
};

そして今、私はそれを次のように使いたいです:

void Lasse2::function(void){
obj->dosmt(); // this doesn't work 
.........

どうすればこれを解決できますか?

4

4 に答える 4

2

クラスのインスタンス メンバーにアクセスする場合は、そのクラスのインスタンスが必要です。これを回避する方法はありません。オプションは次のとおりです。

  1. obj を静的メンバーにします。このクラスのすべてのインスタンスに対して 1 つの obj を使用する場合は、これを行います。
  2. function() から static を削除して、インスタンス メソッドにします。

どちらもできない場合は、関数にインスタンス ポインターを渡す方法を見つける必要があります。たとえば、関数ポインターを必要とする API には、多くの場合、関数が最終的に呼び出されたときにポインター サイズのデータ​​をその関数に渡すためのメカニズムがあります。

于 2013-01-14T15:11:52.530 に答える
1

静的メソッドを変更して、オブジェクト ポインターを明示的に渡します。

static void function(Lasse1* obj)
{
    obj->dosmt(); 
}

しかし、そうする前に、本当に何をしようとしているのかを考えてみてください (必要に応じて別の質問を書いてください)。

于 2013-01-14T15:10:53.280 に答える
1

それをやってのけるには、クラスのインスタンスが必要です。

作成するか、他の方法で受け取る (関数の引数、グローバル変数、クラスの静的変数など)

于 2013-01-14T15:11:04.710 に答える
0

SLaks はそれを最もよく言いました:「あなたはできません」

理由は次のとおりです。

メンバー変数 (静的ではない、obj上記を参照) を宣言すると、型の各オブジェクトLassie2Lassie1.

メソッドを静的に宣言すると、それはそのクラスのすべてのインスタンス (実際のオブジェクト) から独立していることを意味します。オブジェクトには作用しません。

の内部にはLasse2::function、ポインターを取得するためthisLassie2オブジェクトはありません。obj

于 2013-01-14T15:12:39.130 に答える