2013-05-21 67 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); 

这种行为被称为指针解引用。