覆盖方法的问题(使用泛型)
Problem with overriding a method (using generic types)
我在尝试覆盖 "Solver::solve(P key)" 函数时不断收到此错误:
Non-virtual member function marked 'override' hides virtual member function.
hidden overloaded virtual function 'Solver<, std::vector>,std::allocator>>>>::solve' declared here: type mimsatch...
Solver.h:
...
template<class P, class S>
class Solver{
public:
virtual S solve(P key) = 0;
};
B.h
using namespace std;
namespace server_side {
class B: public Solver<string, vector<vector<double>>> {
public:
string solve(vector<vector<double>> mat) override {//<--- The error is here, on "override"
code...
}
但是,如果我将 vector<vector<double>>>
替换为 std::string
,它会完美运行。
问题是我需要它 vector<vector<double>>>
...
有效的替代代码:
...
using namespace std;
namespace server_side {
class B: public Solver<string, string> {
public:
string solve(string mat) override {
code...
}
有什么解决办法吗?
谢谢!
您继承自 Solver<string, vector<vector<double>>>
。 P
是string
,S
是vector<vector<double>>
,纯虚函数有如下签名
virtual vector<vector<double>> solve(string) = 0;
您正试图用
覆盖它
string solve(vector<vector<double>>);
你需要交换一些东西。
Solver<string, string>
有效,因为 P
和 S
相同,所以顺序无关紧要。
另请注意,按值取 vector<vector<double>> mat
对于大型矩阵来说效率非常低。除非你真的需要一份副本,否则你可能想通过 const vector<vector<double>>&
获取它。
我在尝试覆盖 "Solver::solve(P key)" 函数时不断收到此错误:
Non-virtual member function marked 'override' hides virtual member function. hidden overloaded virtual function 'Solver<, std::vector>,std::allocator>>>>::solve' declared here: type mimsatch...
Solver.h:
...
template<class P, class S>
class Solver{
public:
virtual S solve(P key) = 0;
};
B.h
using namespace std;
namespace server_side {
class B: public Solver<string, vector<vector<double>>> {
public:
string solve(vector<vector<double>> mat) override {//<--- The error is here, on "override"
code...
}
但是,如果我将 vector<vector<double>>>
替换为 std::string
,它会完美运行。
问题是我需要它 vector<vector<double>>>
...
有效的替代代码:
...
using namespace std;
namespace server_side {
class B: public Solver<string, string> {
public:
string solve(string mat) override {
code...
}
有什么解决办法吗? 谢谢!
您继承自 Solver<string, vector<vector<double>>>
。 P
是string
,S
是vector<vector<double>>
,纯虚函数有如下签名
virtual vector<vector<double>> solve(string) = 0;
您正试图用
覆盖它string solve(vector<vector<double>>);
你需要交换一些东西。
Solver<string, string>
有效,因为 P
和 S
相同,所以顺序无关紧要。
另请注意,按值取 vector<vector<double>> mat
对于大型矩阵来说效率非常低。除非你真的需要一份副本,否则你可能想通过 const vector<vector<double>>&
获取它。