C++ Libclang解析错误

C++ Libclang解析错误,c++,qt,libclang,C++,Qt,Libclang,我将libclang与qt结合使用,以便为我的自定义IDE创建自动完成功能 我做了这个功能: QList code工具::自动完成(QString内容、QTextCursor光标、QString文件路径、QStringList选项) { QList-lst; QTemporaryFile文件; file.open(); QTextStream流(&文件); 流我使用parseTranslationUnit而不是parseTranslationUnit2 CXTranslationUnit tu

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

我做了这个功能:

QList code工具::自动完成(QString内容、QTextCursor光标、QString文件路径、QStringList选项)
{
QList-lst;
QTemporaryFile文件;
file.open();
QTextStream流(&文件);

流我使用
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;
}

1
绝对是“有效的”,它意味着
cxrerror\u Failure
。我认为您需要从
文件.filenmae().toStdString().c_str()
复制字符串[或者将其准确地传递给函数,以便编译器知道如何保留它],这解释了它发生变化的原因。一旦传入了正确的文件名,您应该使用
clang_getdiagnostic
和friends来找出您遇到的错误(如果有)。
CXTranslationUnit tu = clang_parseTranslationUnit(index, file.fileName().toStdString().c_str(), args, 3, NULL, 0, CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete);
if (tu == NULL){
  return lst;
}