error C2761 member function redeclaration not allowed

寵の児 提交于 2019-12-11 18:03:43

问题


I've encountered a problem(error C2761) while writing specializations for a class. My classes are as follows:

class Print{
public:
    typedef class fontA;
    typedef class fontB;
    typedef class fontC;
    typedef class fontD;

    template<class T>
    void startPrint(void) { return; };
    virtual bool isValidDoc(void) = 0;
};

I have a class QuickPrint which inherits the Print class:

class QuickPrint : public Print {
       ...
};

The error occurs when I try to write specializations for the startPrint method:

template<>        // <= C2716 error given here
void QuickPrint::startPrint<fontA>(void)
{
      /// implementation
}

template<>        // <= C2716 error given here
void QuickPrint::startPrint<fontB>(void)
{
     /// implementation
}

The error appears for the remaining specializations as well.


回答1:


QuickPrint does not have a template member function named startPrint, so specializing QuickPrint::startPrint is an error. If you repeat the template definition in QuickPrint the specializations are okay:

class QuickPrint : public Print {
   template<class T>
    void startPrint(void) { return; };
 };

template<>        // <= C2716 error given here
void QuickPrint::startPrint<Print::fontA>(void)
{
      /// implementation
}

But if the goal here is to be able to call into QuickPrint polymorphically, you're in trouble, because the template function in Print can't be marked virtual.




回答2:


try this:

class QuickPrint : public Print {
    template<class T>
    void startPrint(void) { Print::startPrint<T>(); };
};



回答3:


Your issue is this line:

template<class T> 
void startPrint(void) { return; }; 

You already provide a function body, but then try to redefine it again (using specialization), which won't work.

Remove that function body and it should work.

To define a default behaviour, provide a default value for template paramter T and then add a single specialization for that one.



来源:https://stackoverflow.com/questions/11925563/error-c2761-member-function-redeclaration-not-allowed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!