gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:41:27 25 4
gpt4 key购买 nike

我正在使用 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;
^

关于C++ 不能将变量声明为抽象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41058959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com