0

我在初始化几个对象时遇到问题。我正在编写一个程序,该程序将使用 Player/Stage 模拟 2.0 为移动机器人执行基于边界的探索。我有一个名为 Explorer 的课程。我难以初始化的对象是机器人、pp、lp。我在网上查看了参考页面,我相信这是因为没有赋值运算符,但我希望有另一种方法。

这是我的标题

#ifndef EXPLORER_H_
#define EXPLORER_H_
#include <libplayerc++/playerc++.h>
#include <iostream>
#include <fstream>
#include <math.h>`
#include <list>
#include "Map.h"

using namespace PlayerCc;
using namespace std;

struct Pose {
double x;
double y;
double theta;
};

struct Frontier {
int startRow;
int startCol;
int endRow;
int endCol;
double score;
};

class Explorer {

public:
Explorer();
void Explore(Map *map);
void performLaserSweep(Map *map);
void detectandgroupFrontiers(Map *map);
Frontier score_pick_Frontier();
void goToFrontier(Frontier f);

private:
PlayerClient robot;
Position2dProxy pp;
LaserProxy *lp;
Pose pose;
list<Frontier> unexploredFrontiers;
};

#endif /* EXPLORER_H_ */

这是我的 .cc 文件,重要的是构造函数,这就是我要展示的全部内容

#include "Explorer.h"

Explorer::Explorer() {

robot = new PlayerClient("127.0.0.1", 6665);
pp = new Position2dProxy(robot, 0);
lp = new LaserProxy(robot, 0);
if (lp == NULL) {
    cerr << "Error initializing LASER" << endl;
    exit(1);
}
pp.SetMotorEnable(true);
}

预先感谢您的帮助

这是编译器错误

Explorer.cc: In constructor ‘Explorer::Explorer()’:
Explorer.cc:11: error: no matching function for call to ‘PlayerCc::Position2dProxy::Position2dProxy()’
/usr/include/player-2.0/libplayerc++/playerc++.h:1566: note: candidates are: PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient*, uint)
/usr/include/player-2.0/libplayerc++/playerc++.h:1553: note:                 PlayerCc::Position2dProxy::Position2dProxy(const PlayerCc::Position2dProxy&)
Explorer.cc:13: error: base operand of ‘->’ has non-pointer type ‘PlayerCc::PlayerClient’
Explorer.cc:13: error: expected unqualified-id before ‘new’
Explorer.cc:13: error: expected ‘;’ before ‘new’
Explorer.cc:14: error: no matching function for call to ‘PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient&, int)’
/usr/include/player-2.0/libplayerc++/playerc++.h:1566: note: candidates are: PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient*, uint)
/usr/include/player-2.0/libplayerc++/playerc++.h:1553: note:                 PlayerCc::Position2dProxy::Position2dProxy(const PlayerCc::Position2dProxy&)
Explorer.cc:15: error: no matching function for call to ‘PlayerCc::LaserProxy::LaserProxy(PlayerCc::PlayerClient&, int)’
/usr/include/player-2.0/libplayerc++/playerc++.h:900: note: candidates are: PlayerCc::LaserProxy::LaserProxy(PlayerCc::PlayerClient*, uint)
/usr/include/player-2.0/libplayerc++/playerc++.h:881: note:                 PlayerCc::LaserProxy::LaserProxy(const PlayerCc::LaserProxy&)
make: *** [all] Error 1
4

3 回答 3

1

robot类中Explorer的不是指针,但您正在尝试使用new关键字对其进行初始化:

 robot = new PlayerClient("127.0.0.1", 6665); // this won't work

与变量相同的事情pp

关于您遇到的错误的注释之一:注意:候选者是: PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient*, uint)还表明构造函数需要一个PlayerClient指针。

在 Explorer 类中试试这个:

PlayerClient *robot;

完成后不要忘记去做delete

发现此类错误的一种简单方法是仔细查看错误消息。当错误提示错误:'->' 的基本操作数具有非指针类型时,它仅表示您试图在->不是指针的东西上使用指针运算符。

于 2013-05-06T23:50:06.363 回答
1

与其将类的成员更改为指针(这有其自身的复杂性),不如考虑初始化成员而不是分配给它们。在“c++ member initializer list”上尝试谷歌(这个结果可能是一个很好的起点:http ://www.cplusplus.com/forum/articles/17820/ )

于 2013-05-07T00:06:52.123 回答
0

从它告诉的错误中,candidates are: PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient*, uint) 但您正在传递robot未声明为指针的错误。您已将其声明为PlayerClient robot;但是,您将robot其用作指向对象的指针。

因此,将其更改为PlayerClient *robot;应该注意此错误。

于 2013-05-06T23:53:26.473 回答