2013-05-21 64 views
3

我有關於指針的另一個問題。傳遞給函數頭的指針

我有下面的頭一個函數:

addActor (NxuPhysicsCollection &c, NxActor &a, const char *userProperties=0, const char *actorId=0) 

,我試圖用這樣的:

NXU::NxuPhysicsCollection* collection = new NXU::NxuPhysicsCollection(); 
NxActor* actor = *actors++; 
NXU::addActor(collection, actor, NULL, NULL); 

,但我得到了以下錯誤:

A reference of type "NXU::NxuPhysicsCollection&" (not const-qualified) cannot be initialised with a value of type "NXU::NxuPhysicsCollection*" (this is for the collection parameter, same error appears for actor as well)

我應該如何將集合和actor參數傳遞給函數才能正常工作?

我嘗試這樣做:

NXU::addActor(&collection, &actor, NULL, NULL); 

但是,那並不工作要麼,它給我的錯誤:

"Initial value of reference to non-const must be a lvalue." 

任何幫助是極大的讚賞。

編輯:如果我用這樣的:

NXU::addActor((NXU::NxuPhysicsCollection&)collection, (NxActor&)actor, NULL, NULL); 

它不給我的錯誤了。它是否正確?

不得不提的是NXU和NX命名空間是閉源的,我不能修改它們的實現方式

+0

'我試過這個:NXU :: addActor(&collection,&actor,NULL,NULL);'在這種情況下,你是如何定義'collection'和'actor'的? – Shark

+0

我也試過,但沒有奏效。 – user2399378

回答

3

因爲你的成員函數爲ca形式參數是引用,而collectionactor指針,您需要取消引用指針以使它們與引用兼容:

// No need to pass NULLs for the defaulted parameters, so 
// the trailing NULL, NULL are removed. 
NXU::addActor(*collection, *actor); 

或者,您可以將構造函數的簽名更改爲接受指針而不是引用:

addActor (NxuPhysicsCollection *c, NxActor *a, const char *userProperties=0, const char *actorId=0) 
//       ^  ^
//        |   | 
//        Here and Here 
+0

謝謝,你和Moo-Juice都給了我正確的答案。我無法修改任何關於代碼的內容,因爲我無法訪問它。 – user2399378

0
NXU::addActor(*collection, *actor, NULL, NULL); 

因爲

addActor (NxuPhysicsCollection &c, NxActor &a, const char *userProperties=0, const char *actorId=0) 

接收collectionactor參照,而不是指針

3

ca參數是參考文獻

將它們作爲:

NXU::addActor(*collection, *actor, NULL, NULL); 

這種行爲被稱爲指針解引用。