Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在构造函数中传递指针(*&;)时出现奇怪错误 我根本不是C++大师,我尝试在各种小试验中复制这个错误。事实上,当我用我想做的2到3个类做一个小程序时,没有错误。但是在主要的应用程序中,即使我尝试了很多(甚至是胡说八道的)解决方案,我仍试图编写错误持续存在的代码_C++_Pointers_Function Calls - Fatal编程技术网

在构造函数中传递指针(*&;)时出现奇怪错误 我根本不是C++大师,我尝试在各种小试验中复制这个错误。事实上,当我用我想做的2到3个类做一个小程序时,没有错误。但是在主要的应用程序中,即使我尝试了很多(甚至是胡说八道的)解决方案,我仍试图编写错误持续存在的代码

在构造函数中传递指针(*&;)时出现奇怪错误 我根本不是C++大师,我尝试在各种小试验中复制这个错误。事实上,当我用我想做的2到3个类做一个小程序时,没有错误。但是在主要的应用程序中,即使我尝试了很多(甚至是胡说八道的)解决方案,我仍试图编写错误持续存在的代码,c++,pointers,function-calls,C++,Pointers,Function Calls,问题是,我有一个实例化某些资源(作为指针)的主类和一个策略模式,该模式表示接受构造函数这些资源的不同具体行为 在主应用程序中,init(): 以及: UserPositionBehaviour(Kinect * device, Gui * controls); 这就是错误: src/App.cpp:30: error: no matching function for call to ‘UserPositionBehaviour::UserPositionBehaviour(Kinect*&a

问题是,我有一个实例化某些资源(作为指针)的主类和一个策略模式,该模式表示接受构造函数这些资源的不同具体行为

在主应用程序中,init():

以及:

UserPositionBehaviour(Kinect * device, Gui * controls);
这就是错误:

src/App.cpp:30: error: no matching function for call to ‘UserPositionBehaviour::UserPositionBehaviour(Kinect*&, ofTrueTypeFont*&, ofxGui*&)’
src/UserPositionBehaviour.h:15: note: candidates are: UserPositionBehaviour::UserPositionBehaviour(Kinect*, ofxGui*, ofTrueTypeFont*)
src/UserPositionBehaviour.h:13: note:                 UserPositionBehaviour::UserPositionBehaviour(const UserPositionBehaviour&)
嗯??嘿,发生了什么事?我在传递指针,而不是*&(我不知道如何阅读)

有什么建议吗


我试图用一个仅在couts上构建的简单案例来复制错误,但没有问题,因此可能在其他地方隐藏了一些错误。

如果您确实拥有构造函数,代码应该编译

UserPositionBehaviour(Kinect * device, Gui * controls);
已定义,根据编译器,您不需要:

src/UserPositionBehavior.h:15:注:候选人为: UserPositionBehavior::UserPositionBehavior(Kinect*,ofxGui*, ofTrueTypeFont*)src/userpositionbehavior.h:13:注意:
UserPositionBehavior::UserPositionBehavior(常量 userpositionbehavior&)


*&
仅仅意味着通过引用传递指针-也就是说,它可以在构造函数内部修改

导致错误的代码传递了三个参数(而不是您认为的两个),最后两个参数的顺序错误。您一定看到了错误版本的源文件,或者类似的东西

检查周围是否有过时的
src/userpositionbehavior.h
src/App.cpp
副本,这些副本可能是您查看的,而不是编译器实际编译的版本。或者,您使用的是预编译的头文件,但出现了一些问题


未找到函数的错误消息通常如下所示。
Foo*&
类型为“reference to pointer to Foo”,这意味着您的参数表达式是指向Foo的左值指针。该调用可以匹配按值获取指针的函数,也可以匹配按引用获取指针的函数。编译器也没有找到,但它必须为错误消息选择一些内容,而您的编译器会选择该内容。如果您的调用包含参数表达式
device+0
而不是
device
,则它将没有资格通过非常量引用传递(因为
device+0
的结果是临时的),并且根据错误消息,错误消息不会包含
&
,您使用三个参数而不是两个参数调用构造函数,而最后两个参数的使用方法是错误的

如果这是真正的错误消息,那么您的代码可能如下所示:

UserPositionBehaviour = new UserPositionBehaviour(device, font, controls);
//                                                        ^^^^  ^^^^^^^^
应该是:

UserPositionBehaviour = new UserPositionBehaviour(device, controls, font);
//                                                        ^^^^^^^^  ^^^^
如果你的代码真的像你发布的一样,并且给出了错误信息,那么一些非常奇怪的事情正在发生;在这种情况下,请发布一个完整的可编译示例,以便我们进一步调查


您可以忽略gcc错误消息中额外的
&
:这是一种有点奇怪的说法,表示它正在寻找通过值或引用获取参数的函数。

您向我们展示的代码显示了一个双参数构造函数;错误消息说有三个参数和一个参数。这里有点不对劲--也许你可以给我们看一下真正的代码?这里似乎没有一个接受两个参数的构造函数。是否可能你包含了一些头,其中包含的
userpositionbehavior
的版本与你期望的版本不同?对不起,我犯了错误,我试图简化问题中的代码,顺便说一句,我试图消除一些争论,但问题仍然存在
UserPositionBehaviour = new UserPositionBehaviour(device, controls, font);
//                                                        ^^^^^^^^  ^^^^