[英]c++ initialized specified for non-virtual method
我有啊如下圖所示
class A
{
public:
void doSomething()=0;
};
然后我有bh如下所示
#include "a.h"
class b: public A
{
public:
void doSomething();
};
我只是試圖通過嘗試編譯g++ -c ah bh
等標題來檢查語法錯誤
然后我低於錯誤
ah:4: error: initializer specified for non-virtual method 'void A::doSomething()'
這個錯誤意味着什么?
如果成員函數是虛擬的,則只能將其聲明為abstract( = 0
)。 將virtual
關鍵字添加到基類中的函數聲明中(在類A
)。
在C ++ 11之前,在派生類成員函數的聲明中重復virtual
也是一種好習慣,盡管從技術上講它不是必需的(因為規則是“一次虛擬,總是虛擬”)。
C ++ 11引入了override
關鍵字,它可以在覆蓋虛擬成員函數時使用,以使代碼可以安全地防止將來的更改(即,如果基本函數更改簽名,派生代碼將無法編譯而不是默默地變為錯誤)。 是否還包括virtual
override
存在取決於個人品味/項目編碼標准。 我認為這是不必要的,省略了,但這只是我個人的偏好。
問題正是編譯器所說的。
class A
{
public:
virtual void doSomething()=0; // virtual keyword needed
};
這意味着A
做某事不是虛擬的,但你試圖讓它變成純粹的虛擬。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.