错误:取临时地址

时间:2017-02-03 07:58:26

标签: c++ pointers

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

我得到了着名的“临时地址”错误。据我所知,这是因为我试图将临时对象转换为指针。

但是这里有没有人有解决方法来解决这个问题?

我发现错误的代码如下:

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>                                                                   ^

1 个答案:

答案 0 :(得分:0)

您正在创建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));
    stdafx.h