我有关于指针的另一个问题。
我有一个带有以下标题的函数:
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名称空间是封闭源代码,我无法修改它们的实现方式
答案 0 :(得分:3)
c
和a
参数都是引用。
将它们传递给:
NXU::addActor(*collection, *actor, NULL, NULL);
此行为称为指针取消引用。
答案 1 :(得分:3)
由于c
和a
的成员函数的正式参数是引用,而collection
和actor
是指针,您需要取消引用指针以使它们与引用兼容:
// 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)
通过引用接收collection
和actor
,而不是通过指针接收