在基类中,我有一个函数GetDetections
,它接受一个字符串文件名,构造一个特性集,并将其工作推迟到一个纯虚函数GetDetections
。
在子类中,我实现了这个虚函数。
在main
中,我有一个子类的实例,并GetDetections
使用文件名调用。我认为这会调用接受字符串参数的基类的非虚拟函数,但这不会编译。错误是:
prog.cpp:在函数'int main()'中:
prog.cpp:33:48: 错误: 没有匹配函数调用'SubClass::GetDetections(const char [13])'</p>
prog.cpp:33:48: 注意:候选人是:
prog.cpp:26:9: 注意: virtual int SubClass::GetDetections(const std::vector&) const prog.cpp:26:9: 注意: 参数 1 从 'const char [13]' 到 ' 没有已知的转换const std::vector&'</p>
这是代码。(也发布在http://ideone.com/85Afyx)
#include <iostream>
#include <string>
#include <vector>
struct Feature {
float x;
float y;
float value;
};
class BaseClass {
public:
int GetDetections(const std::string& filename) const {
// Normally, I'd read in features from a file, but for this online
// example, I'll just construct an feature set manually.
std::vector<Feature> features;
return GetDetections(features);
};
// Pure virtual function.
virtual int GetDetections(const std::vector<Feature>& features) const = 0;
};
class SubClass : public BaseClass {
public:
// Giving the pure virtual function an implementation in this class.
int GetDetections(const std::vector<Feature>& features) const {
return 7;
}
};
int main() {
SubClass s;
std::cout << s.GetDetections("testfile.txt");
}
我试过了:
- 在子类中声明
GetDetections
为int GetDetections
,virtual int GetDetections
。