に変換できません。私が実行している問題を示すテストケースを作成しました。遅延ライブラリとポインタキャストの問題について私の知らないことを許してください。 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 *'
あなたのクラス定義のそれらの '...'は有効ではありませんC++。 –
あなたはどのライブラリを使用していますか? –
'SafePtr'や' dynamic_pointer_cast'が何をするのか分かりません。テストケースを作る。 –