2
4

1 に答える 1

2

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) {}
于 2019-05-13T00:17:43.110 に答える