0

関数へのポインターを呼び出すC関数があります(bufへのポインターとbufのサイズを使用)

printf("------------------------------\n");
printf("lengh of DATA_output = %zu\n", p->tot_len);
(*myStr.OnSendData)(buf, p->tot_len);
printf("------------------------------\n");

のように定義された関数へのポインタ

typedef void (*pOnSendData)(void *buf, u16_t len);

次に、実際の C++ クラス メソッドがそのポインターを介して取得します。

void Someclass::myPOnSendData(void *buf, u16_t len) {
std::cout << " Someclass::mypOnSendData len = " << (int)len << std::endl;
//Do something
}

問題はlenbufがかなり大きいことです。

出力は次のとおりです。

------------------------------
lengh of DATA_output = 42
------------------------------

Someclass::myPOnSendData len = 50512

それはどうしてですか?

4

1 に答える 1

0

それは静的メンバー関数ではないと言いmyPOnSendDataますが、それへのポインターをCの関数へのポインターに代入しようとしています。関数への C スタイルのポインターは非静的メンバー関数をサポートしていないため、これは機能しません。

関数を静的に変更すると、ポインター型と互換性があります。

型には現在互換性がないため、関数ポインターを代入しようとするとおそらくエラー メッセージが表示され、それを回避するためにキャストを実行する必要があることに注意してください。エラーを解決するのではなく、エラーを隠しているだけなので、これを行わないでください。

于 2014-07-28T13:44:01.610 に答える