2013-02-03 18 views
4

我的C++應用程序按照預期在Netbeans中編譯和運行。然而,代碼幫助不承認諸如cbegin()cend()unordered_set,作爲明證紅色下劃線:爲什麼Netbeans不認識`cbegin()`,`cend()`,`unordered_set`等C++特性?

enter image description here

代碼幫助識別並end(),但是。無濟於事,我試着去Project - > Properties - > Code Assistance - > C++ Standard - > C++ 11。我還應該更新或配置哪些內容才能讓Netbeans Code Assistance識別這些條款?

+2

這些都是圖書館的新的C++ 11功能寫-std = C++ 11。我不希望所有的IDE都能理解它們......確保你正在使用的庫有這些成員函數(如果它實際上是*讀取庫) –

+0

Netbeans自7.2版以來支持C++ 11(源代碼在我的答案中鏈接)。 – ollo

回答

5

請確保您使用Netbeans版本> = 7.2,因爲此版本中引入了C++ 11支持(see "C/C++")。

如果您已經在NB設置C++標準C++ 11,你可以重新分析您procject:

  1. Selcect你的C++項目 - >右鍵單擊
  2. Code Assistance - >Reparse Project

編輯:

我測試下的NetBeans用下面的代碼的方法的7.3 RC1(使用GCC 4.7.2):

#include <iostream> 
#include <list> 

int main() 
{ 
    std::list<int> mylist = {5,10,15,20}; 

    std::cout << "mylist contains:"; 

    for (auto it = mylist.cbegin(); it != mylist.cend(); ++it) 
    std::cout << ' ' << *it; 

    std::cout << '\n'; 

    return 0; 
} 

用C++標準設置爲默認失敗,但與C + + 11(Project Properties -> Build -> C++ Compiler -> C++ Standard = C++11)它的工作原理。

2

幾點我牢記在心,當我開始了NetBeans和C++ 11

  • 確保其最新版本(NetBeans 7.2.1)
  • 不要使用Cygwin包括海合會庫來編譯你的程序。改用MinGW安裝程序。使用MinGW安裝程序時,請確保從互聯網上下載「最新軟件包」。
  • 安裝後,請確保環境路徑變量爲 正確設置。
  • 打開NetBeans並轉至工具 - >選項。點擊C/C++選項卡並確保MinGW被用作默認編譯器。
  • 右鍵點擊您的項目並選擇屬性。選擇 C++編譯器選項,確保您在其他選項空間
+2

如果將編譯器標準更改爲C++ 11,則會在makefile中設置'std = C++ 11'標誌。如果沒有,你可以*再次清理和構建你的項目。 – ollo

+1

@ollo我在我的答案(我認爲是在G ++ .EXE)中提到的位置設置了** - std = C++ 11 **標誌,並且代碼似乎每次使用C + +11。還有什麼你想說的嗎? – chosentorture

+0

是的,它的工作原理。但是這不會更新NetBeans中可見的編譯器設置。編譯器設置和你一樣完全一樣,但你的方式不會在「C++標準」字段中顯示這些設置。 – ollo

相關問題