gpt4 book ai didi

构造函数中的 C++ 函数指针

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:34 25 4
gpt4 key购买 nike

我正在尝试将函数指针传递给类的构造函数。但是,当我尝试编译代码时,出现错误。代码和错误是:

快速查找

#ifndef QUICKFIND_H
#define QUICKFIND_H
#endif // QUICKFIND_H

template <class T>
class QuickFind
{
private:
int size;
int *array;
int (*giveIndex)(const void *a);
public:
QuickFind<T>(int n,int (*ptr)(const void *));
void connect (const T* u,const T* v);
bool isConnected(const T* u,const T* v);
};

quickfind.cpp 文件中的构造函数定义

template <class T>
QuickFind<T>::QuickFind(int n,int (*ptr)(const void *))
{
size=n;
array=new int[n];
giveIndex=ptr;
for(int i=0;i<n;i++)
{
array[i]=i;
}
}

在我的主函数文件中:

int giveIndex (const void *ptr)
{
temp *tptr=(temp*)ptr;
return tptr->getA();
}

int main()
{
QuickFind<temp> *qf=new QuickFind<temp>(10,giveIndex);
}

在这里,我得到 'undefined reference to QuickFind<temp>::QuickFind(int, int (*)(void const*))'错误。我无法弄清楚问题...请帮忙。

最佳答案

有一件事错了,你不需要在构造函数上:

template <class T>
class QuickFind
{
private:
int size;
int *array;
int (*giveIndex)(const void *a);
public:
QuickFind(int n,int (*ptr)(const void *)); /// <---- here, no <T>
void connect (const T* u,const T* v);
bool isConnected(const T* u,const T* v);
};

在您的例子中,它模板化的类,但这个函数不是。并且,模板函数必须在头文件中定义,以便包含它们的文件可以看到代码并替换参数类型。

关于构造函数中的 C++ 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852480/

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