2011-09-07 23 views
0

下面是一些示例代码,说明了这个问题。
编译和运行正确,但VS2010编辑智能感知抱怨有hold变量和显示以下消息有没有任何解决方法来处理这个虚假的VS2010 C++智能感知错误

智能感知:一个非静态成员引用必须是相对于一个 特定对象

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

这是一个用一个解析器实现语句补全解析器的一个相当不可避免的副作用,一个解析器由Edison Design Group设计,另一个由编译器解析器实现,这个解析器是由Microsoft自行开发的着名的错误/接受以前的语法编译器。 EDG拥有正确的诀窍,让他们同意是一场永无止境的战斗。我可以在哪里签名*从不*必须处理*那个问题?作为一名救援人员或警方侦探,他们在20年后才会退休。 –

回答

2

如果你只是寻找一个解决办法,以安抚VS2010的智能感知,可以在外部拉姆达捕捉保持这样的:

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); 
    }); 
}); 

明确的定义保持的类型或者你觉得是合适的变量重命名为清楚起见(由于懒惰使用自动和名称隐藏)。

相关问题