0

我有两个类: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 指针向量的情况下我得到一个编译错误。非常感谢!

4

3 回答 3

1

您的问题源于 vector< reload_job* > 不是 vector< 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_jobs 存储在 a 中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
于 2013-04-09T03:31:23.347 回答
0

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

类 TJob { 公开:TJob() { }

};

类 reload_job:公共 TJob

{

公开:重新加载作业(){

}

void run_all_threads(std::vector &jobs) {

} };

诠释主要(){

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

reload_job rj;
rj.run_all_threads(vec);

返回0;

}

于 2013-04-09T03:28:10.827 回答
0

该函数需要 astd::vector<TJob*>并且您尝试将其传递给std::vector<reload_job*>. 真的就是这么简单。这些是不同的向量,即使它们的内容是可转换的。

于 2013-04-09T03:31:54.123 回答