初始化对象并将其分配给无指针变量

时间:2013-05-06 23:47:07

标签: c++ algorithm robotics

我在初始化几个对象时遇到了问题。我正在编写一个程序,该程序将使用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

3 个答案:

答案 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;,并应注意此错误。