2013-03-28 140 views
4

我試圖讓MinGW(版本4.7.2)與Visual Studio 2010一起使用一些新的C++ 11功能(可惜我仍然在WindowsXP並且不能使用Visual Studio 2012)。 要開始,我創建了一個項目: 文件 - >新建項目 - >的Visual C++ - >常規 - > Makefile的項目MinGW與Visual Studio 2010集成(Makefile項目)

General: 
Build Command Line: mingw32-make.exe 
Rebuild All Command Line: mingw32-make.exe rebuild all 
Clean Command Line: mingw32-make.exe clean all 

IntelliSense: 
Include Search Path: C:\MinGW\lib\gcc\mingw32\4.7.2\include\c++;C:\MinGW\include; 
Assembly Search Path: C:\MinGW\lib\gcc\mingw32\4.7.2;C:\MinGW\lib; 
Additional Arguments: -std=c++11 

我創建了內容的生成文件:

all: 
    g++ -std=c++11 -pthread -o Makefile_Test.exe main.cpp 

它編譯得很好,但在Visual Studio編輯器中幾乎所有內容都用波浪紅色加下劃線。即

std::vector<std::thread> threads; 

std::vector - > '錯誤:空間std沒有成員向量'

std::thread - > '錯誤:空間std沒有構件螺紋'

甚至std::cout << "";

std::cout - >'Error:namespace std has no member cout'

但是我包含了對應的當然結束標題:Visual Studio甚至可以找到它們(將光標置於#include - > Ctrl + Shift + G打開標題)。我MinGW的文件夾,如下所示:

+ MinGW 
|- bin 
|- doc 
|- include 
|+ lib 
|- gettext 
|+ gcc 
    |+ mingw32 
    |+ 4.7.2 
    |- debug 
    |+ include 
    |- c++ 
    |... 
    |- include-fixed 
    |- install-tools 
|- libexec 
|- mingw32 
|- msys 
|- share 
|- var 

我也試着刪除SDF文件幾次,讓Visual Studio中從頭開始重建 - 但所有這些錯誤又出現了。

任何想法我在做什麼錯在這裏?

回答

9

恐怕你不得不放棄你試圖讓這些紅色波浪消失的嘗試,除非你完全禁用它們(這樣,例如,甚至不會調用不存在的函數將被標記)。

原因是Visual Studio's Intellisense uses a separate front-end to EDG's C++ compiler解析您的程序,並可能在無效的語句或表達式下放置一個紅色的波浪線,而VS2010中的Intellisense使用的版本顯然不完全符合C++ 11。

因此,作爲編譯器切換到GCC 4.7.2將有助於構建C++ 11程序,但不會影響Intellisense的行爲。

如果您想完全禁用紅色波形,可以通過選擇工具 - >選項 - >文本編輯器 - > C/C++ - >高級,並將「禁用Squiggles」設置爲「True」來完成。

+0

哦,我明白了!我沒有意識到這一點 - 謝謝! – Constantin

+1

@Constantin:不客氣,祝你好運!) –

+0

你錯了。錯誤:錯誤:命名空間std沒有成員向量'''錯誤:命名空間std沒有成員cout''當然不屬於C++ 11。我很好奇,在@Constantin做了一個像改變IDE編譯器這樣的常見事情之後,Intellisense變成了一個真正的問題。 –

1

使用像描述的OP這樣的Makefile項目模板。通過爲項目屬性添加適當的包含目錄,我能夠獲得2015年社區版的智能感知工作。

  1. 打開Project menu
  2. 選擇{Project Name} Properties
  3. 打開Configuration Properties
  4. 樹菜單中選擇VC++ Directories
  5. 目錄添加到Includes Directories部分

你必須添加包含您想要讀入的項目的目錄智能感知。假設我正在開發一個gtkmm項目,我還會包含glibmm目錄,這樣Glib :: ustrings就不會變小。即使glibmm.h沒有直接包含在我的源文件中。