2012-01-28 25 views
1

我更感興趣知道爲什麼它不編譯而不是修復代碼。Lambda函數在Visual Studio 2010中無法編譯

致命錯誤C1001:編譯器中發生內部錯誤。

int main() 
{ 
    class MyClass 
    { 
    public: 
     MyClass(const std::string & name) 
      : name_(name) {} 
     std::string name_; 
    }; 

    auto creator = []() -> MyClass * 
    { 
     return new MyClass("Hello World"); 
    }; 

    MyClass * pMyClass = creator(); 

    return 0; 
} 

回答

6

致命錯誤C1001:發生在編譯器的內部錯誤。

無論何時您看到內部編譯器錯誤,您都會在編譯器本身查看錯誤。基本上,編譯器沒有給出編譯器錯誤;它墜毀

在這些情況下,只要它們發生,就沒有「爲什麼」(除非資源耗盡)。或者至少,不是一個容易確定的問題。最好的辦法是嘗試重新排列代碼以使編譯器工作。

如果您未使用VC2010 SP1,請升級到Service Pack並重試。

+1

@aCuria:如果它仍與SP1發生,你應提交在Microsoft Connect上的bug報告:http://connect.microsoft.com/ – Ferruccio 2012-01-29 11:55:37

+0

更具體地說,https://connect.microsoft.com/VisualStudio/ – ildjarn 2012-01-30 18:33:38

3

作爲另一個數據點,在VS 2010編譯器的64位版本不會崩潰,但它給出了這樣的錯誤,而不是:

test.cpp(16) : error C2061: syntax error : identifier 'MyClass' 

如果class MyClass定義的main()外移,無論是x86和x64編譯器將工作。

顯然,x86編譯器崩潰是一個錯誤。我相信在lambda中使用本地MyClass類型應該沒問題(並且GCC 4.6.1與-std=gnu++0x沒有問題),所以我認爲x64編譯器拋出的錯誤也是一個錯誤。

我目前無法訪問VS 11 Dev Preview以測試問題是否仍然存在。

VS 11 Dev Preview(cl.exe版本17.00.40825.2)與lambda中使用的本地MyClass類型沒有問題。

相關問題