Инициализация объектов и присвоение его указателям без переменных

У меня проблемы с инициализацией пары объектов. Я пишу программу, которая будет выполнять исследование границ для мобильного робота, используя Player / Stage simulation 2.0. У меня есть класс под названием Explorer. Объекты, с которыми я сталкиваюсь с трудностями при инициализации, — это робот, стр., Л.П. Я смотрю на справочную страницу в Интернете и полагаю, что это потому, что для этого нет оператора присваивания, но я надеюсь, что есть другой способ сделать это .;

Это мой заголовок

#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

Решение

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 это когда вы закончите с этим.

Простой способ обнаружить подобные ошибки — внимательно изучить сообщения об ошибках. Когда ошибка говорит ошибка: базовый операнд ‘->’ имеет тип без указателя это просто означает, что вы пытаетесь использовать оператор указателя -> на то, что не является указателем.

1

Другие решения

Вместо того, чтобы менять членов вашего класса на указатели (что связано со своими сложностями), рассмотрите возможность инициализации членов, а не их назначения. Попробуйте Google в «Списке инициализаторов членов C ++» (этот результат может быть хорошим началом: http://www.cplusplus.com/forum/articles/17820/)

1

От ошибки это говорит candidates are: PlayerCc::Position2dProxy::Position2dProxy(PlayerCc::PlayerClient*, uint) но вы проходите robot который не объявлен как указатель. Вы объявили это как PlayerClient robot; Тем не менее, вы используете robot как указатель на объект.

Так что измени это PlayerClient *robot; и эта ошибка должна быть устранена.

0
По вопросам рекламы [email protected]