我正在使用C++模板,但出现了以上错误。
我的代码如下:
#include <iostream>
#include <string>
using namespace std;
enum type{ONE,TWO,THREE,FOUR,FIVE};
class base{
public:
virtual void baseOut()const =0;
};
template<class T>
class derived:public base{
virtual void drivedOut()const=0;
};
template<class T,type>
class derived2:public derived<T>{
public:
void baseOut(){}
void drivedOut(){}
};
int main(){
derived2<string,ONE> d;
return 0;
}
我的问题是,由于我已经在类模板drived2中覆盖了纯虚函数,所以为什么drived2仍然是抽象类?如何删除此错误。
谢谢:)
最佳答案
您尚未覆盖base::baseOut
,因为derived2::baseOut
是非const
!
void baseOut() const { }
// ^^^^^
derived2::derivedOut
也是如此。您应该养成使用
override
捕获这些错误的习惯。void baseOut() override { } // Error, overrides nothing!
void baseOut() const override { } // OK
在这一方面,Clang比GCC更有用:
main.cpp:18:14: warning: 'derived2<std::__cxx11::basic_string<char>, type::ONE>::baseOut'
hides overloaded virtual function [-Woverloaded-virtual]
void baseOut(){}
^
[...]
main.cpp:8:22: note: hidden overloaded virtual function 'base::baseOut' declared here:
different qualifiers (const vs none)
virtual void baseOut()const =0;
^