首页 > 解决方案 > 对类型“A *”的非常量左值引用不能绑定到不相关类型“std::shared_ptr ”的值

问题描述

标签: c++shared-ptrreference-binding

解决方案


std::shared_ptr<X>不能隐式转换为X*. 因此,由于BuildStack需要一个原始指针,因此当您尝试使用 shared_ptr 调用它时它会抱怨。您可以从 shared_ptr 获取原始指针:

void Target::GoWheeled() {
     // this variable is only needed because BuildStack takes an lvalue reference
     // if you can change that, you don't need the variable
     MobileRobot* rawPtr = wheeledRobotInMaze.get();
     wheeledMaze.BuildStack(rawPtr);
}

或者,可能是更好的选择,因为始终使用 shared_ptr 而不是将其与原始指针混合通常是一个好主意,您可以更改签名BuildStack以采用 shared_ptr:

void Maze::BuildStack(std::shared_ptr<MobileRobot> &robot_in_maze) {}

推荐阅读