覆盖方法的问题(使用泛型)

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>>>PstringSvector<vector<double>>,纯虚函数有如下签名

virtual vector<vector<double>> solve(string) = 0;

您正试图用

覆盖它
string solve(vector<vector<double>>);

你需要交换一些东西。

Solver<string, string> 有效,因为 PS 相同,所以顺序无关紧要。


另请注意,按值取 vector<vector<double>> mat 对于大型矩阵来说效率非常低。除非你真的需要一份副本,否则你可能想通过 const vector<vector<double>>& 获取它。