我是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 *'是没有意义的。 有人遇到过这个问题吗?谢谢!
答案 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);
之后我在编译期间没有错误。