我正在尝试执行此代码。我认为这很简单,但我收到了这个错误,我无法解决这个问题:
// 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);
答案 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方法,因此您有错误。