我有两个类: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


那个电话出现错误。但是,如果我将函数的形式更改为:

void run_all_threads(TJob* job)


并致电:

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


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

最佳答案

您的问题源于vector 不是vector 的子类型的事实,即使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_jobs存储在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

08-26 18:34