Мне известен вопрос, который уже существует по этому поводу, но я не мог исследовать, комментируя, потому что у меня недостаточно репутации.
Поэтому я использую синтаксис в vim и хочу скомпилировать материал с ++.
Мой vimrc выглядит так:
72 set statusline+=%#warningmsg#
73 set statusline+=%{SyntasticStatuslineFlag()}
74 set statusline+=%*
75
76 " let g:syntastic_cpp_compiler = 'g++'
77 let g:syntastic_cpp_compiler_options = ' -std=c++11'
78
79 let g:syntastic_always_populate_loc_list = 1
80 let g:syntastic_auto_loc_list = 1
81 let g:syntastic_check_on_open = 1
82 let g:syntastic_check_on_wq = 0
Моя программа выглядит так:
1 #include <functional>
2
3 using namespace std;
4
5 int f(int x){
6 return x;
7 }
8
9 void f2(function<int(int)> f){
10
11 }
12
13 int main(){
14 return 0;
15 }
Если я заменю строку 76 «clang ++» вместо «g ++» в моем vimrc, я получу следующие ошибки:
1 diff.cpp|11 col 6 error| variable has incomplete type 'void'
2 diff.cpp|11 col 11 error| use of undeclared identifier 'function'
3 diff.cpp|11 col 33 error| expected '(' for function-style cast or type construction
4 diff.cpp|11 col 46 error| expected '(' for function-style cast or type construction
5 diff.cpp|11 col 48 error| expected ';' after top level declarator
Если я просто удаляю строку 77 и компилирую с g ++, я получаю:
1 test.cpp|9 col 9 error| variable or field ‘f2’ declared void
2 test.cpp|9 col 9 error| ‘function’ was not declared in this scope
3 test.cpp|9 col 18 error| expected primary-expression before ‘int’
Наконец, если я скомпилирую программу так, как она выглядит здесь, я не получу никаких проверок синтаксиса. Если я потом скомпилирую, то получу:
test.cpp:9:9: error: variable or field ‘f2’ declared void
void f2(function<int(int)> f){
^
test.cpp:9:9: error: ‘function’ was not declared in this scope
test.cpp:9:18: error: expected primary-expression before ‘int’
void f2(function<int(int)> f){
Почему это и какие шашки следует добавить для простой компиляции файлов C ++ 11? это действительно расстраивает
let g: syntastic_cpp_compiler_options = ‘-std = c ++ 11’
В строке 77 вашего vimrc есть небольшая ошибка. Так должно быть
let g:syntastic_cpp_compiler_options = ' --std=c++11'
Обратите внимание на две черты перед std=c++11
Других решений пока нет …