2011-08-11 30 views
-1

我已經做了一個測試用例來顯示我遇到的問題。請原諒我對延遲庫和指針投射問題的無知。包含在deferred.lib中的唯一庫。C++無法從延遲:: SafePtr <T>轉換到T *

#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; 
} 

當我嘗試編譯在Windows XP中使用VS2008我得到:

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:

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

然後我收到此錯誤:

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* t = dynamic_pointer_cast<ManagerTimings>(d->endResult().get()); 
如果你想獲得一個 「不安全」 的指針,或者可能這

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

獲得安全ManagerTimings指針。我不知道你在使用什麼庫,但我懷疑dynamic_pointer_cast可以將SafePtr轉換爲另一個SafePtr。或者它只是轉換指針。

+0

我已更新我的帖子以顯示簡單的測試用例。我嘗試了這兩個建議都沒有成功。我正在使用deferred.lib。 「不安全」的第一個建議給了我這個:錯誤C2784:'deferred :: SafePtr deferred :: dynamic_pointer_cast(const deferred :: SafePtr < U >&)':無法推斷'const deferred :: SafePtr < U >& 'from'deferred :: CallbackData *' – Snowman0602

+0

第二個給了我這個:錯誤C2664:'deferred :: intrusive_ptr_release':無法將參數1從'char *'轉換爲'deferred :: ReferenceCountable *' – Snowman0602

相關問題