错误:将'const sdf'传递为'this'参数会丢弃限定符[-fpermissive]

时间:2018-02-01 19:24:14

标签: c++

我正在尝试执行此代码。我认为这很简单,但我收到了这个错误,我无法解决这个问题:

// THIS IS THE MAIN FILE ////////
/////////////////////////////////

#include <iostream>
#include "sdf_func.hpp"
#include "single_task_func.hpp"
using namespace std;


int main() {
    sdf obj1;
    s_task cgh;
    cgh.single_task([=] {
        for (int i=0; i<30; i++) {
            obj1.sdf_write(10);
        };
    });
    cgh.single_task([=] {
        for (int i=0; i<30; i++) {
            obj1.sdf_write(10);
        };
    });
    return 0;
};      

// THIS IS SDF_FUNC.HPP ////////////////////
////////////////////////////////////////////
#include <iostream>
using namespace std;


class sdf {
int done;
public:
    sdf() : done(0) {};
    void sdf_write (int size) {
        static int wr_count = 0;
        if (wr_count == size) {
            done++;
        }
        wr_count++;
        cout << wr_count;
    };
};


// THIS IS SINGLE_TASK_FUNC.HPP///////////////////
//////////////////////////////////////////////////
#include <iostream>
#include <thread>
using namespace std;

class s_task {

struct task {

    void schedule (std::function<void(void)> f) {
        auto execution = [=] { f(); };
        std::thread thread(execution);
        thread.detach();
    };
};

task *task1;

public:
  void single_task(std::function<void(void)> F) {
    task1->schedule(F);
  }
};

我正在尝试运行2线程。但出于某种原因,我试图调用lambda函数&#34; single_task&#34;从主要。它给了我这个错误:

错误:将'const sdf'传递为'this'参数会丢弃限定符[-fpermissive]     obj1.sdf_write(10);

1 个答案:

答案 0 :(得分:1)

cgh.single_task([=] {
    for (int i=0; i<30; i++) {
        obj1.sdf_write(10);
    };
});

应该是:

cgh.single_task([=] mutable {
    for (int i=0; i<30; i++) {
        obj1.sdf_write(10);
    };
});

来自lambda

  

mutable:允许body修改copy和by捕获的参数   调用非const成员函数

由于sdf_write是非const方法,因此您有错误。