How to override a pure virtual function in template class in C++? -


i trying override pure virtual function:

template <class p, class r> class visitor {     public:         virtual ~visitor() {}         virtual r visit(astnode& n, p p) = 0; };  class tostringvisitor : public visitor<string, int> {     virtual string visit(astnode& n, int p) override {         return "";     } } 

however, error:

error: 'virtual std::__cxx11::string tostringvisitor::visit(astnode&, int)' marked 'override', not override   virtual string visit(astnode& n, int p) override { 

why isn't overriding?

none of other questions find on have such succinct example, or detail of template return value in superclass.

in line:

class tostringvisitor : public visitor<string, int> {                      parameter type (p) --^     ^-- return type (r) 

you have swap string int because mismatches parameter should passed (p = int) , return type (r = string):

class tostringvisitor : public visitor<int, string> {                    parameter type (p) --^      ^-- return type (r) 

then conform template class declaration.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -