2011-08-11 10 views
-1

に変換できません。私が実行している問題を示すテストケースを作成しました。遅延ライブラリとポインタキャストの問題について私の知らないことを許してください。 deferred.libに含まれる唯一のライブラリです。その後C++ deferred :: SafePtr <T>からT *

ManagerTimings* t = dynamic_pointer_cast<ManagerTimings>(d->endResult()).get(); 

#include <deferred/deferred.h> 

using namespace deferred; 

SafePtr<Deferred> recordTime(int time) 
{ 
    SafePtr<Deferred> d = createDeferred(); 
    SafePtr<CallbackData> p = new PointerCBD< char>(0); 
    d->execute(p); 
    return d; 
} 

int main(int argc, char* argv[]) 
{ 
    while(1) 
    { 
     SafePtr<Deferred> d = recordTime(1000); 
     d->waitHereForCompletion(); 
     char* c = dynamic_pointer_cast<char>(d->endResult()); 
    } 
    return 0; 
} 

私がしようとするとVS2008でのWindows XPにコンパイルするときに私が取得:

Error C2440: 'initializing' : cannot convert from 'deferred:SafePtr' to 'char *' with [T=char]

No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called.

私はむしろSafePtrよりも、ポインタを戻すには、このコマンドを試してみましたこのエラーが表示されます:

Error C2664: 'deferred::intrusive_ptr_release' : cannot convert parameter 1 from 'char *' to 'deferred:ReferenceCountable *'

私は、このコマンドを試してみました:

ManagerTimings* t = dynamic_pointer_cast<ManagerTimings>(d->endResult().get()); 

は、その後、私はこのエラーを取得する:

Error C2784: 'deferred::SafePtr deferred::dynamic_pointer_cast(const deferred::SafePtr< U > &)' : could not deduce template argument for 'const deferred::SafePtr< U > &' from 'deferred::CallbackData *'

+1

あなたのクラス定義のそれらの '...'は有効ではありませんC++。 –

+0

あなたはどのライブラリを使用していますか? –

+2

'SafePtr'や' dynamic_pointer_cast'が何をするのか分かりません。テストケースを作る。 –

答えて

-1
&*d->endResult() 

私はこのコードendResultからだと思いますが、とのトラブルを抱えているSafePtrです。

0

このお試しください:安全ManagerTimingsポインタを取得するために

SafePtr<ManagerTimings> t= dynamic_pointer_cast<ManagerTimings>(d->endResult()); 

:あなたは "安全でない" ポインタ、またはおそらくこれを取得したい場合

ManagerTimings* t = dynamic_pointer_cast<ManagerTimings>(d->endResult().get()); 

を。どのライブラリを使用しているのかわかりませんが、dynamic_pointer_castSafePtrを別のSafePtrに変換することができます。または単にポインタを変換します。

+0

簡単なテストケースを示すために投稿を更新しました。私はこれらの提案を両方とも成功させずに試みました。私はdeferred.libを使用しています。エラーC2784: 'deferred :: SafePtr deferred :: SafePtr < U >'のテンプレート引数を推定できませんでした。 'from' deferred :: CallbackData * ' – Snowman0602

+0

2番目は私にこれを与えました:エラーC2664:' deferred :: intrusive_ptr_release ':' char * 'から' deferred :: ReferenceCountable * 'にパラメータ1を変換できません – Snowman0602

関連する問題