我有一个像这样的三个类的类树:
class A {
public:
virtual void function() = 0;
};
template<typename type> class B : public A {
};
template<typename type> class C : public B<type> {
void function() override {
}
};
如果定义错误,我使用override
关键字 inC
使编译器发出错误。使用 编译时GCC
,我没有收到任何错误并且程序编译。我认为这是正确的行为,因为function()
在基类中定义为 virtual A
。
但是,如果我用它编译它clang
,它不会在 中找到函数A
,并发出带有漂亮颜色的编译器错误:
test.cpp:10:2: error: only virtual member functions can be marked 'override'
void function() override {
这是一个错误clang
,还是应该是这样?