C++ 为什么我下班后不上班?

C++ 为什么我下班后不上班?,c++,vim,clang,youcompleteme,clang-cl,C++,Vim,Clang,Youcompleteme,Clang Cl,我已根据安装指南安装了YouCompleteMe。我正在Windows机器上使用gVim。基本的符号完成正在工作,但我无法使它从我的标题自动完成 如果我有: #include <vector> using namespace std; vector<int> myVector; 或 诊断学 我开始诊断这个问题:YcmDiags命令提供来自头文件的错误列表。由于YouCompleteMe使用clang不断编译源代码,我试图用clang编译我的文件。我还知道我应该在.yc

我已根据安装指南安装了YouCompleteMe。我正在Windows机器上使用gVim。基本的符号完成正在工作,但我无法使它从我的标题自动完成

如果我有:

#include <vector>
using namespace std;
vector<int> myVector;


诊断学 我开始诊断这个问题<代码>:YcmDiags命令提供来自头文件的错误列表。由于YouCompleteMe使用clang不断编译源代码,我试图用clang编译我的文件。我还知道我应该在.ycm\u extra\u conf.py中为clangin标志指定命令行选项。我不知道YCM是运行clang.exe还是运行clang-cl.exe,但在从命令行运行vsvars32.bat之后,我实际上成功地使用clang-cl.exe手动编译了.cpp文件。我没有使用clang.exe成功编译

这是我的.ycm\u extra\u conf.py文件标志部分:

flags = [ 
'-std=c++11',
'-x', 'c++',
'-I', 'C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include',
'-I', 'C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt',
'-I', 'C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include',
'-I', 'C:/Program Files (x86)/Windows Kits/NETFXSDK/4.6/include/um',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/um',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/shared',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/winrt',
'/link', '/LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\lib" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10150.0\ucrt\x86" /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86"',
'/EHsc']

micbou对这个问题给了我一个答案

在Windows上,Clang将32位上的
i686 pc Windows gnu
和64位上的
x86_64-w64-Windows-gnu
用作其默认目标。您需要通过添加以下标志将其更改为MSVC:

flags=['--target=-pc-windows-msvc']
其中,32位上为
i686
,64位上为
x86\u 64
,并且
是MSVC的版本。您可以通过运行VC++编译器
cl.exe
找到它。在您的情况下,因为您在32位上使用MSVC 14,所以目标应该是
i686-pc-windows-msvc19.00.23506

使用已经添加的include标志,您应该可以从标题中获得完成


在我的特殊情况下,
--target=x86_64-pc-windows-msvc19.00.23026
标志解决了问题。

这与YCM无关,只是回答了普通的方法

在linux上,我通常做的是扩展
路径
以包括std库头,如:

set path+=/usr/include/**
然后,我们可以使用Ctrl-p或Ctrl-n

flags = [ 
'-std=c++11',
'-x', 'c++',
'-I', 'C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include',
'-I', 'C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt',
'-I', 'C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include',
'-I', 'C:/Program Files (x86)/Windows Kits/NETFXSDK/4.6/include/um',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/um',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/shared',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/winrt',
'/link', '/LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\lib" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10150.0\ucrt\x86" /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86"',
'/EHsc']
set path+=/usr/include/**