错误:无法解析对重载函数的引用;你的意思是调用它吗?

error: reference to overloaded function could not be resolved; did you mean to call it?

本文关键字:引用 意思是 调用 函数 重载 错误      更新时间:2023-10-16

下面的代码:

#include <cstddef>
using std::size_t;
int hOccupy(int* numB, const void* f, int bS, size_t dyn);
template <class T>
inline int hOccupy(int* numB, T f, int bS, size_t dyn) {
return hOccupy(numB, reinterpret_cast<const void*>(f), bS, dyn);
}
int main(int argc, char *argv[]) {
decltype(&hOccupy) f = &hOccupy;
}

给出错误:

error: reference to overloaded function could not be resolved; did you mean to call it?

谁能建议这里有什么问题以及如何克服它?

hOccupy是一个重载函数。 这意味着为了获取它的地址,您需要指定您想要地址的重载。 例如,如果您希望指针指向

hError_t hOccupy(int* numB, const void* f, int bS, size_t dyn);

然后你可以使用

auto f = static_cast<hError_t (*)(int, const void*, int, size_t)>(&hOccupy);

如果您希望f引用重载集,那么您可以使用类似 lambda 来执行此操作

auto f = [](int* numB, auto f, int bS, size_t dyn){ return hOccupy(numB, f, bS, dyn); };

为了补充 NathanOliver 提供的答案,如果您想要指向模板重载的特定实例的指针,则需要在代码中指定类型 (T(。

例如:

decltype(&hOccupy<int*>) f = &hOccupy;

如果没有指定的类型,则decltype语句的格式不正确。