C++ C++;17带有捕获*的可变lambda和回调函数给出;错误C2100:非法间接寻址“;
我在尝试使用lambda函数和新的C++17功能通过复制捕获此信息时,出现了一个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
错误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;
}