-2

我根本不是 C++ 大师,我试图在各种小试验中复制这个错误。事实是,当我用我想做的事情做一个有 2 或 3 个类的小程序时,没有错误。但是在主要应用程序中,即使我尝试了很多(甚至是胡说八道)解决方案,我也想写错误仍然存​​在。

问题是我有一个实例化一些资源(作为指针)的主类和一个策略模式,该模式用于实例化不同的具体行为,这些行为在构造函数中选择资源。

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

device = new Kinect();
controls = new Gui();

UserPositionBehaviour = new UserPositionBehaviour(device, controls);

并且,行为构造函数:

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 上构建的简单案例来复制错误,但没有问题,所以也许在其他地方隐藏了一些错误..

4

3 回答 3

3

导致错误的代码传递了三个参数(不是您想象的两个),并且最后两个的顺序错误。您必须查看源文件的错误版本,或类似的东西。

检查愚蠢的东西,比如过时的副本src/UserPositionBehaviour.hsrc/App.cpp到处乱放的东西,你可能正在查看而不是查看编译器实际正在编译的版本。或者,也许您正在使用预编译的标头,但那里出了点问题。

未找到函数的错误消息通常如下所示。是类型“对指向 Foo 的指针的Foo *&引用”,它只是意味着您的参数表达式是一个指向 Foo 的左值指针。该调用可以匹配按值获取指针的函数,或按引用获取指针的函数。编译器也没有找到,但它必须为错误消息选择一些东西,而你的编译器会选择那个。如果您的调用包含参数表达式device+0device不是.device+0&

于 2012-05-24T14:01:09.867 回答
3

根据错误消息,您正在使用三个参数而不是两个参数调用构造函数,并且您将最后两个参数弄错了。

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

UserPositionBehaviour = new UserPositionBehaviour(device, font, controls);
//                                                        ^^^^  ^^^^^^^^

应该是:

UserPositionBehaviour = new UserPositionBehaviour(device, controls, font);
//                                                        ^^^^^^^^  ^^^^

如果您的代码确实看起来像您发布的内容,并给出了错误消息,那么确实发生了一些非常奇怪的事情;在这种情况下,请发布一个完整的可编译示例,以便我们进一步调查。

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

于 2012-05-24T14:01:55.343 回答
1

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

UserPositionBehaviour(Kinect * device, Gui * controls);

定义,根据编译器,您不会:

src/UserPositionBehaviour.h:15: 注意: 候选人是: UserPositionBehaviour::UserPositionBehaviour(Kinect*, ofxGui*, ofTrueTypeFont*) src/UserPositionBehaviour.h:13: 注意:
UserPositionBehaviour::UserPositionBehaviour(const UserPositionBehaviour&)

简单的*&意思是您通过引用传递指针 - 即它可以在构造函数中修改。

于 2012-05-24T13:53:38.327 回答