错误:获取临时地址

Error: taking address of temporary

本文关键字:地址 获取 错误      更新时间:2023-10-16

我知道这个问题已经被问了很多,但没有一个答案可以帮助我解决我的特定问题。

我得到了著名的"临时地址"错误。据我了解,这是因为我正在尝试将临时对象转换为指针。

但是这里有人有解决方案可以解决我如何在这里解决这个问题吗?

发生错误的代码如下:

newGame = &MenuOption(optionNewGame, text_new_game.width, 2, 0);

newGame 的声明如下所示:

MenuOption *newGame;

错误如下所示:

1>  c:/path/to/project/MainMenu.h:27:65: error: taking address of temporary [-fpermissive]
1>     newGame = &MenuOption(optionNewGame, text_new_game.width, 2, 0);
1>                                                                   ^

您正在创建MenuOption类的临时对象。然后,将此临时对象的地址存储在 newGame 中。离开控制块后,临时对象将被删除,指针将变为"悬空指针"。

解决 方案:

  • MenuOption newGame(optionNewGame, text_new_game.width, 2, 0);
  • newGame = new MenuOption(optionNewGame, text_new_game.width, 2, 0);
  • 使用unique_ptr

    std::unique_ptr< MenuOption> newGame; newGame.reset( new MenuOption(optionNewGame, text_new_game.width, 2, 0));