这个虚假的VS2010 C ++ IntelliSense错误是否有任何变通方法

时间:2011-09-07 05:30:48

标签: visual-studio-2010 lambda intellisense c++11

以下是一些说明问题的示例代码 正确编译并运行,但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的预览版,它很满意代码 - 没有波浪线,所以至少它已经修复了下一个版本。

1 个答案:

答案 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的类型或重命名变量,以便在您觉得合适时使用(由于懒惰而使用自动和名称隐藏)。