2016-01-21 2 views
1

Я пытаюсь настроить YouCompleteMe на моей машине, и я в основном там, за исключением небольшой проблемы. Когда я использую cout для простого cout << "Hello world!" << endl;, YCM выделяет cout, первый << и строку как ошибку, сообщая мне: недопустимые операнды для двоичного выражения ('ostream' (aka 'int') и 'const char *').Как я могу исправить неправильную ошибку YouCompleteMe об использовании «cout»?

Я знаю, что моя программа верна. Он компилируется и запускается. Что может вызвать такое поведение?

Сообщите мне, если я не предоставил никакой информации.

Спасибо!

Edit: мой .ycm_extra_conf.py файл следующим образом:

import os 
import ycm_core 

# These are the compilation flags that will be used in case there's no 
# compilation database set (by default, one is not set). 
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. 
flags = [ 
'-Wall', 
'-stdlib=libc++', 
'-std=c++11', 
'-x', 'c++', 
# This path will only work on OS X, but extra paths that don't exist are not 
# harmful 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include' 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include' 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include' 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks' 
'-isystem', '/System/Library/Frameworks/Python.framework/Headers', 
'-isystem', '../llvm/include', 
'-isystem', '../llvm/tools/clang/include', 
'-I','.', 
'-I','./ClangCompleter', 
] 

# Set this to the absolute path to the folder (NOT the file!) containing the 
# compile_commands.json file to use that instead of 'flags'. See here for 
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html 
# 
# Most projects will NOT need to set this to anything; you can just change the 
# 'flags' list of compilation flags. Notice that YCM itself uses that approach. 
compilation_database_folder = '' 

if compilation_database_folder: 
    database = ycm_core.CompilationDatabase(compilation_database_folder) 
else: 
    database = None 


def DirectoryOfThisScript(): 
    return os.path.dirname(os.path.abspath(__file__)) 


def MakeRelativePathsInFlagsAbsolute(flags, working_directory): 
    if not working_directory: 
     return list(flags) 
    new_flags = [] 
    make_next_absolute = False 
    path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] 
    for flag in flags: 
     new_flag = flag 

     if make_next_absolute: 
      make_next_absolute = False 
      if not flag.startswith('/'): 
       new_flag = os.path.join(working_directory, flag) 

     for path_flag in path_flags: 
      if flag == path_flag: 
       make_next_absolute = True 
       break 

      if flag.startswith(path_flag): 
       path = flag[ len(path_flag): ] 
       new_flag = path_flag + os.path.join(working_directory, path) 
       break 
     if new_flag: 
      new_flags.append(new_flag) 
    return new_flags 


def FlagsForFile(filename): 
    if database: 
     # Bear in mind that compilation_info.compiler_flags_ does NOT return a 
     # python list, but a "list-like" StringVec object 
     compilation_info = database.GetCompilationInfoForFile(filename) 
     final_flags = MakeRelativePathsInFlagsAbsolute(compilation_info.compiler_flags_, compilation_info.compiler_working_dir_) 
    else: 
     # relative_to = DirectoryOfThisScript() 
     relative_to = os.path.dirname(os.path.abspath(filename)) 
     final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to) 

    return { 
     'flags': final_flags, 
     'do_cache': True 
    } 
+0

Вы включили правильный заголовок и добавили служебную декларацию/директиву? – Jaege

+1

Похоже, вы забыли добавить флаговые компиляции в свой файл '.ycm_extra_conf.py' – DennisS

+0

@DennisS Хорошо, я добавил файл .ycm_extra_conf.py и добавил его как глобальный резерв в ~/.vimrc, но у меня есть не знаю, с чего начать с флагов компилятора. До сих пор у меня есть '' -Wall ', ' -std = C++ 11 ', ' -stdlib = libC++ ', ' -x ',' C++ ', ' -isystem ','/usr/lib/C++/v1 ' ' – HeliosPanoptes

ответ

1

Я забыл запятые на конце линий, рассказывающих YCM, где найти библиотеки. Скорректированные флаги чтения:

flags = [ 
'-Wall', 
'-stdlib=libc++', 
'-std=c++11', 
'-x', 'c++', 
#'-x', 'c++-header' 
# This path will only work on OS X, but extra paths that don't exist are not 
# harmful 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include', 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include', 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include', 
'-isystem', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks', 
'-isystem', '/System/Library/Frameworks/Python.framework/Headers', 
'-isystem', '../llvm/include', 
'-isystem', '../llvm/tools/clang/include', 
'-I','.', 
'-I','./ClangCompleter', 
] 

В любом случае, я многому научился от всего Googling я сделал, так что это не полная потеря. Спасибо всем, кто пытался помочь!