Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;17带有捕获*的可变lambda和回调函数给出;错误C2100:非法间接寻址“;_C++_Visual Studio_Visual C++_Lambda_C++17 - Fatal编程技术网

C++ C++;17带有捕获*的可变lambda和回调函数给出;错误C2100:非法间接寻址“;

C++ C++;17带有捕获*的可变lambda和回调函数给出;错误C2100:非法间接寻址“;,c++,visual-studio,visual-c++,lambda,c++17,C++,Visual Studio,Visual C++,Lambda,C++17,我在尝试使用lambda函数和新的C++17功能通过复制捕获此信息时,出现了一个错误C2100:invalized indirection编译器错误 #包括 #包括 #包括 #包括 甲级 { 私人: std::字符串myText; 公众: void setText(std::string str) { myText=str; }; std::function getPrintFunction(std::function setter) { //C++17通过复制捕获此信息 return[*thi

我在尝试使用lambda函数和新的C++17功能通过复制捕获此信息时,出现了一个
错误C2100:invalized indirection
编译器错误

#包括
#包括
#包括
#包括
甲级
{
私人:
std::字符串myText;
公众:
void setText(std::string str)
{
myText=str;
};
std::function getPrintFunction(std::function setter)
{
//C++17通过复制捕获此信息
return[*this,setter]()可变{
setter(*本文件);
printMyText();
};
};
私人:
void printMyText()
{

std::难道代码在我看来是合理的吗。这可能是MSVC的错误。这也不是第一次发生这种情况(请参阅)。好的,那么我将向VisualStudio的开发人员社区报告一个错误。非常感谢。这似乎是一个问题。此问题的修复程序已发布!我建议您尝试使用visual studio 2019的最新版本,并尝试使用
/std:c++latest
而不是
/std:c++17
,因为它是关于新的lambda处理器的。它也可以工作
/experimental:newLambdaProcessor
。在我看来,这段代码很合理。这可能是MSVC的错误。这也不是第一次发生(请参阅)。好的,那么我将向VisualStudio的开发人员社区报告一个错误。非常感谢。这似乎是一个问题。此问题的修复程序已发布!我建议您尝试使用visual studio 2019的最新版本,并尝试使用
/std:c++latest
而不是
/std:c++17
,因为它是关于新的lambda处理器的。它也可以工作
/实验性:newLambdaProcessor
#include <functional>
#include <vector>
#include <string>
#include <iostream>

class A
{
private:
    std::string myText;
public:
    void setText(std::string str)
    {
        myText = str;
    };

    std::function<void()> getPrintFunction(std::function<void(A&)> setter)
    {
        // C++17 capture this by copy
        return [*this, setter]() mutable {
            setter(*this);
            printMyText();
        };
    };
private:
    void printMyText()
    {
        std::cout << myText << std::endl;
    };
};


int main()
{
    A a;
    auto f = a.getPrintFunction([](A& a2) { a2.setText("Hello World"); });
    f();
    return 0;
}