【问题标题】:Libclang parse errorLibclang 解析错误
【发布时间】:2015-09-16 07:39:39
【问题描述】:

我将 libclang 与 qt 一起使用,以便为我的自定义 IDE 创建自动完成功能。

我做了这个功能:

QList<CompleterItem> CodeTool::autocompletion(QString content, QTextCursor cursor, QString filepath, QStringList options)
{
    QList<CompleterItem> lst;

    QTemporaryFile file;
    file.open();
    QTextStream stream(&file);
    stream << content;

    const char* filen = file.fileName().toStdString().c_str();

    CXIndex index = clang_createIndex(0, 0);

    const char* args[] = {"-x", "c++" };
    qDebug() << filen;

    CXTranslationUnit tu = NULL;
    CXErrorCode err = clang_parseTranslationUnit2(index, filen, args, 2, NULL, 0, CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete, &tu );
    qDebug() << filen;
    if (err != 0){
        qDebug() << err;
        return lst;
    }

    // some things ....
}

但它不起作用。输出显示错误代码 = 1(libclang 文档中的未知错误)。此外,filen 在调用 parse 函数之前和之后都被修改了。 示例:

C:/Users/Yoann/AppData/Local/Temp/plugin-test.Ns4152

C:\Dev\Qt\Qt5.5.0\Tools\mingw492_32\include\c++\4.9.2

谢谢,

【问题讨论】:

  • 1 的值肯定是“有效的”,即CXError_Failure。我认为您需要从 file.filenmae().toStdString().c_str() 复制字符串 [或将其准确传递给函数,以便编译器知道保留它],这解释了它为什么会发生变化。一旦你传入了正确的文件名,你应该使用clang_getDiagnistic 和朋友来找出你得到了什么错误,如果有的话。

标签: c++ qt libclang


【解决方案1】:

我通过使用parseTranslationUnit 而不是parseTranslationUnit2 来解决它

CXTranslationUnit tu = clang_parseTranslationUnit(index, file.fileName().toStdString().c_str(), args, 3, NULL, 0, CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete);
if (tu == NULL){
  return lst;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多