簡體   English   中英

為非虛方法指定的c ++初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM