2016-12-07 11 views
-3

voidを受け取る関数Quitがあります。**私はDataStructure *を受け取った新しい関数に渡す必要があります。void *はオブジェクト型へのポインタではありません - voidからのキャストエラー**

問題は、dsのデータがガベージに置き換えられることです。私に何ができる ?

void Quit(void** DS){ 
     DataStructure* ds = (DataStructure*) *DS; 
     return ds->Quit(); //'void*' is not a pointer to object type 
} 

秒の定義が終了し

は()です:

void DataStructure::Quit(); 

とメインで呼び出しは次のように行われます。私たちはキャストば我々は同じ結果を得る

DataStructure *data; 
Quit((void**) &ds); 

次のようになります。

DataStructure* ds = reinterpret_cast<DataStructure*>(*DS);  
+1

'((データ構造*)* DS)が

void Quit(void** DS){ DataStructure* ds = (DataStructure*) *DS; return ds->Quit(); } 
;'のように見えますNOP。 –

+2

完全なコンパイルエラーや完全な例を提供する必要があります –

+0

'data'が有効な' DataStructure'を指していない場合、動作するものは何も期待できません。 – molbdnilo

答えて

1

DS変数は、実際にあなたは、単にそれをキャストすることができますDataStructure*です:あなたはそれを行うことを期待するよう

void Quit(void** DS) 
{ 
     DataStructure* ds = (DataStructure*)DS; 
     return ds->Quit(); 
} 
2

キャスト作品は、それだけでDSの種類を変更しません。

((DataStructure*)* DS)は、*DSの値を変換して結果をスローします。
は(あなたのコンパイラは、それは効果がありませんことを警告している場合があります。)あなたは、変換の結果を保存する必要が

+1

以上yer、 'DataStructure * ds = reinterpret_cast (* DS);' – YSC

+0

これはコンパイルをパスしますが、私はすべての回答に対してDSにあったものを失います。私はそのデータを失いたくはありません。確かに、DSはDataStructure **型ですが、私の関数はvoid **しか得られません。 –

+0

@ R.Gadこの 'void ** 'も作成するコードを投稿してください。 – molbdnilo

関連する問題