CommonOptionsParser中的一个奇怪的错误

时间:2014-03-22 12:42:18

标签: clang

我是Clang的新学员,遇到了一个奇怪的错误。

我的代码很简单:

..... 
static llvm::cl::OptionCategory MyToolCategory(""); 
..... 
int main(int argc, const char **argv) 
{ 
  CommonOptionsParser OptionsParser(argc, argv, MyToolCategory); 
  ClangTool Tool(OptionsParser.getCompilations(), 
                 OptionsParser.getSourcePathList()); 
  tooling::MyFactory Factory; 
  Tool.run(newFrontendActionFactory(&Factory)); 
  return 0; 
} 

但是用clang ++编译时报告了一个非常奇怪的错误(我的llvm& clang的版本是3.4):

ToolingTutorial.cpp:74:23: error: no matching constructor for initialization of 'clang::tooling::CommonOptionsParser' 
  CommonOptionsParser OptionsParser(argc, argv, MyToolCategory); 
                      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~ 
/home/acsa-amd2/Documents/llvm-3.4/tools/clang/include/clang/Tooling/CommonOptionsParser.h:67:3: note: candidate constructor not 
      viable: no known conversion from 'llvm::cl::OptionCategory' to 'const char *' for 3rd argument 
  CommonOptionsParser(int &argc, const char **argv, const char *Overview = 0); 
  ^ 
/home/acsa-amd2/Documents/llvm-3.4/tools/clang/include/clang/Tooling/CommonOptionsParser.h:61:7: note: candidate constructor 
      (the implicit move constructor) not viable: requires 1 argument, but 3 were provided 
class CommonOptionsParser { 
      ^ 
/home/acsa-amd2/Documents/llvm-3.4/tools/clang/include/clang/Tooling/CommonOptionsParser.h:61:7: note: candidate constructor 
      (the implicit copy constructor) not viable: requires 1 argument, but 3 were provided 
1 error generated. 
make: *** [ToolingTutorial.o] Error 1 

构造函数不匹配并且编译器错误'llvm :: cl :: OptionCategory'代表'const char *'是没有意义的。 有人遇到过这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我在教程中遇到了同样的错误,错误消息说最后一个参数有问题。

我检查了官方API(http://clang.llvm.org/doxygen/classclang_1_1tooling_1_1CommonOptionsParser.html),给出的示例似乎使用相同的模式。

但是我也检查了我的源文件(Arch上的/usr/include/clang/Tooling/CommonOptionsParser.h),构造函数的声明也不一样。 我的铿锵版是3.4。下一个版本是3.5,我认为是官方文档 是为3.5。

根据clang 3.4源文件中的文档,最后一个参数似乎是optionnal,你可以使用:

CommonOptionsParser OptionsParser(argc, argv);

之后我在编译期间没有错误。