我在Mac OS X上使用vim,而我的vimrc包含以下键映射:
function! CPPSET()
set makeprg=if\ \[\ -f\ \"Makefile\"\ \];then\ make\ $*;else\ if\ \[\ -f\ \"makefile\"\ \];then\ make\ $*;else\ g++\ -std=gnu++0x\ -O2\ -g\ -Wall\ -Wextra\ -o\ %<\ %;fi;fi
set cindent
set nowrap
nnoremap <buffer> <F9> :w<cr>:!g++ -O2 % -o %< -std=c++14 -I ./<cr>:!./%<<cr>
nnoremap <buffer> <F8> :w<cr>:!g++ -Wall -Wextra -Wshadow -O2 % -o %< -std=c++11 -I ./<cr>
endfunction
当我按F9时,我使用这些键映射来编译和运行。它工作正常,直到今天:我注意到文件不会编译,并在包含这些标题时出现以下错误:
#include <stack>
#include <queue>
我注意到当我从cpp文件中删除两个这些头文件时,它工作正常。此外,当我尝试使用
编译该文件(包含这两个标题)时g++ hello.cpp (instead of using F9 in Vim)
它运作得很好。请看一下!我尝试重新安装xcode,但它没有用。
In file included from queue.cpp:16:
./queue:1:1: error: source file is not valid UTF-8
<CF><FA><ED><FE><U+0007><U+0000><U+0000><U+0001><U+0003><U+0000>
<U+0000><80><U+0002><U+0000><U+0000><U+0000><U+0010><U+0000><U+0000>
<U+0000>p<U+0006><U+0000><U+0000><85>...
./queue:1:2: error: source file is not valid UTF-8
<CF><FA><ED><FE><U+0007><U+0000><U+0000><U+0001><U+0003><U+0000>
<U+0000><80><U+0002><U+0000><U+0000><U+0000><U+0010><U+0000><U+0000>
<U+0000>p<U+0006><U+0000><U+0000><85>...
./queue:1:5: error: expected unqualified-id
<CF><FA><ED><FE><U+0007><U+0000><U+0000><U+0001><U+0003><U+0000>
<U+0000><80><U+0002><U+0000><U+0000><U+0000><U+0010><U+0000><U+0000>
<U+0000>p<U+0006><U+0000><U+0000><85>...
^
./queue:1:6: warning: null character ignored [-Wnull-character]
<CF><FA><ED><FE><U+0007><U+0000><U+0000><U+0001><U+0003><U+0000>
<U+0000><80><U+0002><U+0000><U+0000><U+0000><U+0010><U+0000><U+0000>
<U+0000>p<U+0006><U+0000><U+0000><85>...
^
./queue:1:7: warning: null character ignored [-Wnull-character]
<CF><FA><ED><FE><U+0007><U+0000><U+0000><U+0001><U+0003><U+0000>
<U+0000><80><U+0002><U+0000><U+0000><U+0000><U+0010><U+0000><U+0000>
<U+0000>p<U+0006><U+0000><U+0000><85>...
...continue
编辑:
答案 0 :(得分:2)
您的(根据您的图片)您的工作目录中有一个名为queue
的二进制文件(可能是可执行文件)。由于某些奇怪的原因,您需要发现它,它包含在#include <queue>
中(查看编辑器或IDE传递给g++
的实际程序参数)。删除该文件。
(根据经验,避免使用与计算机上通常相同的名称来命名程序;拥有名为queue
的可执行文件对C ++的不良品味显影剂)功能
您可能希望将-H
传递给g++
,以了解所包含的文件。
然后花几个小时或几天阅读Invoking GCC上的文档,并学会使用build automation或GNU make之类的ninja工具。对于make
,请阅读documentation of make
,然后编写您自己的Makefile
(警告:标签字符很重要)。对于ninja
,请参阅this。您需要了解应如何调用g++
。
最后,阅读source code editor(或IDE)的文档,并根据您的需要和品味对其进行配置。您可能希望它在单个功能按键上运行一些make
或ninja
命令。如何做到这一点在文档中解释。对于vim,请参阅this。
要理解的重要一点是,IDE只是能够运行一些外部命令来构建软件的源代码编辑器。您可以配置该命令。 C ++编译器 - 实际上 - 总是命令行程序(通常是GCC或Clang),你需要学习如何调用它们(你通常更喜欢使用构建自动化工具来运行编译命令)。