以下是一些说明问题的示例代码
正确编译并运行,但VS2010编辑器IntelliSense抱怨hold
变量并显示以下消息
IntelliSense:非静态成员引用必须与a相关 具体对象
class tester
{
public:
void test()
{
int outer[] = {1,2,3};
int inner[] = {4,5,6};
std::for_each(outer, outer + _countof(outer), [&](int o) {
std::for_each(inner, inner + _countof(inner), [&](int i) {
hold.push_back(i + o);
});
});
}
private:
std::vector<int> hold;
};
int main(int argc, char* argv[])
{
tester().test();
return 0;
}
注意:如果只有一个级别的for_each(例如外部)
,那就很高兴了有没有其他人遇到过这种情况,如果有的话,有没有办法稍微改变一下,以便智能感知很高兴,或者我是否陷入了红色波浪线?
更新: 我已经下载了VS11的预览版,它很满意代码 - 没有波浪线,所以至少它已经修复了下一个版本。
答案 0 :(得分:2)
如果你只是想找到一个解决方法来安抚VS2010的智能感知,你可以像这样捕捉外部lambda:
std::for_each(outer, outer + _countof(outer), [&](int o) {
auto &hold = this->hold; // capturing hold to avoid intellisense reporting an "error"
std::for_each(inner, inner + _countof(inner), [&](int i) {
hold.push_back(i + o);
});
});
明确定义hold的类型或重命名变量,以便在您觉得合适时使用(由于懒惰而使用自动和名称隐藏)。