在基类和扩展类之间存在关系的情况下,没有匹配函数错误

no matching function error in the case of relation between base class and extend class

本文关键字:错误 函数 情况下 扩展 基类 之间 关系 存在      更新时间:2023-10-16

我有两个类:TJob和Reload_Job。Reload_Job扩展自TJob:

class reload_job: public TJob 

我得到了一个函数:

void run_all_threads(std::vector<TJob*> &jobs){...}

和一个调用:

std::vector<reload_job*> jobs;
thread_pool->run_all_threads(jobs); //error: No matching function

A在调用时得到一个错误。但是,如果我将函数的形式改为:

void run_all_threads(TJob* job)

和调用:

reload_job* job;
thread_pool->run_all_threads(job); it work

你们能帮我解释一下为什么我在Tjob指针矢量的情况下出现了编译错误吗?非常感谢!

您的问题源于vector不是vector&lt的子类型;TJob*>,尽管reload_job是TJob的子类型。

在第一个示例中,编译器搜索签名为run_all_threads(vector < reload_job* >)的函数。没有这个签名的函数

void run_all_threads(std::vector<TJob*> &jobs){...}
std::vector<reload_job*> jobs;
thread_pool->run_all_threads(jobs); //error: No function matches run_all_threads(vector <reload_job*>)

然而,在第二种情况下,reload_job是TJob,所以编译器匹配函数。

void run_all_threads(TJob* job)
reload_job* job;
thread_pool->run_all_threads(job); The compiler matches the function

要解决您的问题,请将函数参数更改为vector< TJob* >。您可以将reload_job存储在vector < TJob* >中,因为reload_job是TJob。

void run_all_threads(std::vector<TJob*> &jobs){...} // function signature doesn't change
std::vector<TJob*> jobs; // this vector can store TJob and/or reload_job
thread_pool->run_all_threads(jobs); // now the types match

我已经写了类似的类骨架,我没有看到任何问题。你能提供更多关于你的类实现的细节吗?

类TJob{公众:TJob (){}

};

class reload_job: public TJob

{

公众:reload_job (){

}

void run_all_threads(std::vector &jobs){

}

};

int main () {

std::vector<TJob*>vec;
vec.push_back(new reload_job());
reload_job rj;
rj.run_all_threads(vec);

返回0;

}

函数接受一个std::vector<TJob*>,您尝试传递一个std::vector<reload_job*>。事情就是这么简单。它们是不同的向量,尽管它们的内容是可转换的。