4

我正在尝试让 MinGW(版本 4.7.2)与 Visual Studio 2010 一起使用以使用一些新的 C++11 功能(遗憾的是我仍在使用 WindowsXP 并且无法使用 Visual Studio 2012)。首先,我创建了一个项目:文件 -> 新项目 -> Visual C++ -> 常规 -> Makefile-Project

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

我创建了一个包含内容的makefile:

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

它编译得很好,但在 Visual Studios 编辑器中几乎所有内容都带有波浪红色下划线。IE

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

std::vector-> '错误:命名空间 std 没有成员向量'

std::thread-> '错误:命名空间 std 没有成员线程'

甚至std::cout << "";

std::cout-> '错误:命名空间 std 没有成员 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 从头开始​​重建它 - 但所有这些错误再次出现。

有什么想法我在这里做错了吗?

4

2 回答 2

9

恐怕您将不得不放弃使那些红色曲线消失的尝试,除非您完全禁用它们(这样,例如,甚至不会标记对不存在的函数的调用)。

原因是Visual Studio 的 Intellisense 使用 EDG 的 C++ 编译器的单独前端来解析您的程序,并可能在无效语句或表达式下放置一个红色波浪线,并且 Intellisense 在 VS2010 中使用的版本(显然)不完全符合 C ++11。

因此,切换到 GCC 4.7.2 作为编译器将有助于构建 C++11 程序,但不会影响 Intellisense 的行为。

如果要完全禁用红色曲线,可以通过选择工具 -> 选项 -> 文本编辑器 -> C/C++ -> 高级,然后将“禁用曲线”设置为“真”来实现。

于 2013-03-28T16:03:18.327 回答
1

使用像 OP 描述的 Makefile 项目模板。通过将正确的包含目录添加到项目属性中,我已经能够让 VC 2013 和 2015 社区版的智能感知工作。

  1. 打开Project menu
  2. 选择{Project Name} Properties
  3. 打开Configuration Properties
  4. VC++ Directories在树形菜单中选择
  5. 将目录添加到该Includes Directories部分

您必须将包含要读取的项目的目录添加到智能感知中。假设我正在开发一个 gtkmm 项目,我还会包含 glibmm 目录,这样 Glib::ustrings 就不会出现曲线。即使 glibmm.h 没有直接包含在我的源文件中。

于 2015-09-09T22:42:05.583 回答