Прежде всего, есть куча похожих постов, которые выглядят так же, как и они, но я считаю, что они отличаются от моей проблемы. Я пытаюсь использовать умные указатели впервые в моей жизни C ++. У меня проблемы с умным указателем Чтобы быть точным, я пытаюсь преобразовать следующие необработанные указатели (строка № 15 кода, показанного ниже) в умные указатели:
class Maze {
public:
Maze() = default;
~Maze() = default;
void BuildStack(MobileRobot *&robot_in_maze);
};
class Target {
public:
Target() = default;
~Target() = default;
void GoWheeled();
private:
Maze wheeledMaze;
MobileRobot *wheeledRobotInMaze = new WheeledRobot();
};
class MobileRobot {
public:
MobileRobot() = default;
MobileRobot(std::string RobotName);
~MobileRobot() = default;
std::string name;
};
class WheeledRobot : public MobileRobot {
public:
WheeledRobot(): MobileRobot("Wheeled Robot") {};
~WheeledRobot() = default;
};
class TrackedRobot : public MobileRobot {
public:
TrackedRobot(): MobileRobot("Tracked Robot") {};
~TrackedRobot() = default;
};
void Maze::BuildStack(MobileRobot *&robot_in_maze) {}
void Target::GoWheeled() {
wheeledMaze.BuildStack(wheeledRobotInMaze);
}
Когда я пытаюсь преобразовать строку № 15 кода в тип общего указателя, показанный ниже:
std::shared_ptr<MobileRobot> wheeledRobotInMaze = std::make_shared<WheeledRobot>();
В строке № 41 кода появляется следующая ошибка:
Non-const lvalue reference to type 'MobileRobot *' cannot bind to a value of unrelated type 'std::shared_ptr<MobileRobot>'
Почему это происходит?