编译错误:在此上下文中无法隐式捕获“this”

Posted

技术标签:

【中文标题】编译错误:在此上下文中无法隐式捕获“this”【英文标题】:Compilation error : 'this' cannot be implicitly captured in this context 【发布时间】:2016-07-26 16:57:35 【问题描述】:

我正在尝试添加一个 condition_variable 来处理线程,但在这一行出现编译错误:

this->cv.wait(lk, []return this->ready;);

看起来对于变量 this->ready,'this' 不在正确的范围内。

在 Java 中可以使用 TestThread.this 来处理,C++ 中是否有任何相同的功能?

void TestThread::Thread_Activity()
    
        std::cout << "Thread started \n";
        // Wait until ThreadA() sends data
        
            std::unique_lock<std::mutex> lk(m);
            this->cv.wait(lk, []return ready;);
        

        std::cout << "Thread is processing data\n";
        data += " after processing";
        // Send data back to ThreadA through the condition variable
        
           // std::lock_guard<std::mutex> lk(m);
            processed = true;
           // std::cout << "Thread B signals data processing completed\n";
        

    

【问题讨论】:

旁注:在不同的上下文中,可能根本不需要捕获this。例如,static 类方法和变量可以在 lambda 中使用,而无需捕获 this 【参考方案1】:

你需要捕获this指针:

this->cv.wait(lk, [this]return ready;);

【讨论】:

以上是关于编译错误:在此上下文中无法隐式捕获“this”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获 constexpr 变量

编译器错误信息: CS0029: 无法将类型“int []”隐式转换为“string”

错误:变量“无法隐式捕获,因为未指定默认捕获模式”

为啥 C# 编译器不调用隐式运算符。编译器错误?

boost分配器无法在递归上下文中编译

编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”?