指针传递给函数头

时间:2013-05-21 15:58:07

标签: c++ pointers reference

我有关于指针的另一个问题。

我有一个带有以下标题的函数:

 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);

但是我收到以下错误:

  

“NXU :: NxuPhysicsCollection&”类型的引用(不是const限定的)不能使用“NXU :: NxuPhysicsCollection *”类型的值进行初始化(这是针对集合参数,同样的错误也出现在演员身上)

我应该如何将集合和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名称空间是封闭源代码,我无法修改它们的实现方式

3 个答案:

答案 0 :(得分:3)

ca参数都是引用

将它们传递给:

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

此行为称为指针取消引用。

答案 1 :(得分: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

答案 2 :(得分:0)

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

,因为

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

通过引用接收collectionactor ,而不是通过指针接收