0

私は次のコードを持っています:

void funcA(void*   pArg)
{
    STRUCTA abc;
    .
    . // Some processing here
    .

    if (pArg)
       (STRUCTA *)pArg = abc;
}

問題は、このコードが次の警告をスローしていることです。警告:割り当てのターゲットは実際には左辺値ではありません。これは将来的には難しいエラーになります

キャストがないと、voidポインタを逆参照しようとしているという別の警告が表示されます...

警告はエラーとして扱われているため、このコードを使用することはできません-しかし、引数としてvoid*以外のポインタータイプを実際に使用することはできません。私が見逃しているエレガントな解決策はありますか?

これを機能させる方法はありますか?

4

4 に答える 4

5

(STRUCTA *)pArgはポインタ型ですが、そうでabcはありません。ポインタを逆参照する必要があります。

*(STRUCTA *)pArg = abc;
于 2010-12-03T08:30:24.797 に答える
4

STRUCTAへのポインタにを割り当てていますSTRUCTA

むしろ:

*((STRUCTA *)pArg) = abc;
于 2010-12-03T08:31:56.217 に答える
1

これを試して:

memcpy(pArg, &abc, sizeof(abc));

ただし、pArgが割り当てられたメモリのsizeof(abc)バイトを指していることを確認する必要があります。

于 2010-12-03T08:32:31.963 に答える
-1

多分pArg = (void *) abc;

編集:

pArg = (void *) (&abc);

于 2010-12-03T08:30:43.183 に答える