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