2011-09-07 25 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); 
    }); 
}); 

明確的定義保持的類型或者你覺得是合適的變量重命名爲清楚起見(由於懶惰使用自動和名稱隱藏)。

相關問題