C ++不能将变量声明为抽象类型

时间:2016-12-09 11:03:38

标签: c++

我正在使用C ++模板,我收到了上面的错误。

我的代码如下:

export default from './Button';

我的问题是,由于我已经在类模板drived2中覆盖了纯虚函数,为什么drived2仍然是一个抽象类?如何删除此错误。

谢谢:)

2 个答案:

答案 0 :(得分:14)

您还没有覆盖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;
                     ^

答案 1 :(得分:0)

函数alsp的重载取决于该函数的常量。

请参阅http://www.geeksforgeeks.org/function-overloading-and-const-functions/

在你的代码中

virtual void baseOut()const =0; - Const函数

void baseOut(){} - 非const函数。

因此它不是函数重写(你期望的),而是函数重载。 由于哪个derived2也成为一个抽象类,因为两个虚函数不存在函数定义。