C ++ 11 Lambda函数编译错误

时间:2014-01-13 19:44:16

标签: c++11 lambda sdl

我是新的使用c ++ 11功能,并尝试使用SDL_Widget-2 lib为我的项目构建一个简单的Gui。但我陷入了这个问题:

#include "sdl-widgets.h"
class Builder
{
  public:
    Builder():top_win(nullptr)
      ,but(nullptr)
    {
        top_win=new TopWin("Hello",Rect(100,100,120,100),0,0,false,
          []() {
            top_win->clear();
            draw_title_ttf->draw_string(top_win->render,"Hello world!",Point(20,40));
          }
        );
        but=new Button(top_win,0,Rect(5,10,60,0),"catch me",
          [](Button *b) {
            static int dy=60;
            b->hide();
            b->move(0,dy);
            b->hidden=false;
            dy= dy==60 ? -60 : 60;
          });
    }
private:
    TopWin *  top_win;
    Button *but;
};
int main(int,char**) {
     Builder aViewBuilder;
  get_events();
  return 0;
}

编译阶段出错:

在lambda函数中:

 error: 'this' was not captured for this lambda function 
 error: 'this' was not captured for this lambda function 

此错误在控制台中打印两次。 我试过了:

[this](){}

[=](){}

[&](){}

具有不同的编译错误,但不能更进一步。 可以看到修复吗?

1 个答案:

答案 0 :(得分:3)

您需要使用[this][&]进行捕获。我怀疑TopWinButton构造函数采用原始函数指针,需要取std::function s。

普通的vanilla函数指针与捕获lambda不兼容。 std::function能够像函数指针一样工作,也可以安全存储捕获的数据。 (即当function对象本身被复制或销毁时,需要正确复制或销毁捕获的对象)