我在初始化几个对象时遇到了问题。我正在编写一个程序,该程序将使用Player / Stage simulation 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
答案 0 :(得分: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
。
发现错误的简单方法是仔细查看错误消息。当错误显示错误:' - &gt;'的基本操作数具有非指针类型时,它只是意味着您尝试在不是指针的事物上使用指针运算符->
答案 1 :(得分:1)
不要将类的成员更改为指针(具有自身的复杂性),而是考虑初始化成员而不是分配给成员。在“c ++成员初始化列表”上试用Google(这个结果可能是一个很好的起点:http://www.cplusplus.com/forum/articles/17820/)
答案 2 :(得分:0)
从错误中它告诉candidates are: PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient*, uint)
但是你传递的robot
未被声明为指针。您已将其声明为PlayerClient robot;
但是,您使用robot
作为指向对象的指针。
因此请将其更改为PlayerClient *robot;
,并应注意此错误。