在基类和扩展类之间存在关系的情况下,没有匹配函数错误
no matching function error in the case of relation between base class and extend class
我有两个类: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
在第一个示例中,编译器搜索签名为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*>
。事情就是这么简单。它们是不同的向量,尽管它们的内容是可转换的。
相关文章:
- 链接器错误:函数的多个定义
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:函数声明符之后的预期函数体
- C 错误 - 函数不能超载
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 错误:函数调用中有两个参数
- 错误:函数不是“类”的静态数据成员 - C++
- C ,G 编译错误函数
- CMake 解析错误函数缺少结尾")"。而是找到带有文本的未终止字符串")
- C++ 错误 函数 2 的多重定义
- 错误:函数调用中从int到int(*)[4]的转换无效
- C++14 自动扣除错误:函数返回一个数组
- 视觉C++错误:函数必须返回一个值
- 错误:函数声明中的两种或多种数据类型
- 错误:函数未在作用域中声明
- rtw_android.c错误:函数“strnicmp”的隐式声明[-Weror=隐式函数声明]
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]
- 简单程序中的链接器错误:函数的多重定义
- 错误:函数参数太多
- 错误:函数__tmaincrtstartup中引用的未解析的外部符号_main