gpt4 book ai didi

c++ - 为什么这个类型别名会导致编译错误(C++)?

转载 作者:行者123 更新时间:2023-11-28 05:04:34 25 4
gpt4 key购买 nike

我正在编写一个 LLVM pass,用于重命名函数等。我有这么一小段代码

// Get function arguments
std::vector<Argument*> Arguments;
for (auto Arg = F.arg_begin(); Arg != F.arg_end(); ++Arg)
{
Type *ArgTy = Arg->getType();

if (ArgTy->isFloatingPointTy())
{
errs() << "Cannot test function: " << F.getName() << " (floating point arguments)\n";
return false;
}
Arguments.push_back(Arg);
}

Arguments.push_back(Arg)导致编译错误:

no known conversion for argument 1 from ‘llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Argument, false, false, void>, false, false>’ to ‘llvm::Argument* const&’ .

但是,在头文件中llvm/IR/Function.h ( source ), arg_iterator被声明为类型 Argument * 的别名,以及函数 arg_begin()arg_end()Function 调用例如,返回 arg_iterator()类型。那么为什么我会收到类型错误?这与使用 auto 有关系吗?关键字?

最佳答案

检查您在驱动器上使用的文件的版本。如果您没有直接从 GitHub 使用它,但也许您的文件以某种方式随 LLVM 安装一起提供,请检查您正在构建的实际文件。

GitHub 上的“责备”表明,arg_begin/arg_end 返回类型从 ArgumentListType::iterator 发生了变化到大约 4 个月前 ( commit ) 的 Argument *,因此您可能正在构建旧版本,它仍然具有原始的复杂迭代器类型。

关于c++ - 为什么这个类型别名会导致编译错误(C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45140198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com