将'const CMyclass'作为'this'参数传递给...丢弃限定符[-fpermissive]

bar*_*rej 3 c++ lambda compiler-errors function-pointers pass-by-reference

通过编译以下代码

g++ -std=c++11 test.cpp
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

test.cpp: In lambda function:
test.cpp:17:128: error: passing ‘const CMyclass’ as ‘this’ argument of ‘void CMyclass::my_method(const state_type&, double)’ discards qualifiers [-fpermissive]
  std::function<void(const state_type &,const double)> observer = [=](const state_type &x,const double t){my_class.my_method(x,t);};
                                                                                                                                ^
Run Code Online (Sandbox Code Playgroud)

我搜索过其他类似的问题,但我无法弄清楚这段代码有什么问题.

#include <vector>
#include <functional>

typedef std::vector<int> state_type;

class CMyclass
{
public:
    void my_method( const state_type &x , const double t )
    {
    }
};

int main()
{
    CMyclass my_class;
    std::function<void(const state_type &,const double)> observer =
         [=](const state_type &x,const double t)
         {
             my_class.my_method(x,t);
         };
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我不会放在const方法之后.

0x4*_*2D2 11

因为你的价值my_class变得const合格.您有三种方法可以解决它:

  1. 添加const到您的方法:

    void my_method(const state_type &x, const double t) const
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过参考捕获:

    [&](const state_type &x, const double t) { .. }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 或者使lambda变为可变:

    [=](const state_type &x,const double t) mutable { .. }
    
    Run Code Online (Sandbox Code Playgroud)