2010-11-06 12 views
3

我有一個基類,它有虛函數。問題在於,允許基礎實例化,但這意味着它的所有功能都需要定義。這會導致編譯器警告我有關未使用的參數。我能做些什麼來正確地擺脫這些警告,而不是使用純虛擬函數並將其變爲抽象類?Fixng未使用的正式參數警告,而沒有抽象類

例如:

class Foo { 
public: 
virtual void bar(int x) {} //unused formal parameter int x 
} 

由於

+1

刪除功能? – 2010-11-06 23:05:16

+1

@PigBen:然後他們不會是可以通過指針到基地調用的虛擬方法。 – 2010-11-06 23:06:39

+1

這是一個代碼氣味。爲什麼虛擬功能不是純粹的? = 0。 – 2010-11-06 23:13:23

回答

14

通常的解決辦法是:

virtual void bar(int x) { (void)x; } 

或:

virtual void bar(int) {} 

這防止編譯器哀。請注意,此技術不限於虛擬成員函數;它應該適用於你不打算使用一個或多個參數的任何函數。

在不相關的說明上;一個具有空成員函數定義的可實例化基類聽起來不是一個好主意;你確定只是把它抽象出來會更好嗎?

+0

非常感謝!我認爲我會使用後者。 – jmasterx 2010-11-06 23:08:43

+0

嗯,它是我的GUI API的Widgets的基類,我用它作爲根部件來容納所有其他部件。它不應該被真正使用,但它是由用戶決定的。 – jmasterx 2010-11-06 23:12:09

+1

@Milo:你應該考慮*爲什麼用戶會做這樣的事情,如果它有空的函數定義。 – Puppy 2010-11-06 23:13:19

1

對於它的價值,另一種方法是:

virtual void bar(int /*x*/) {} 
2

是否有使用絕對最明顯的解決方案有問題嗎?

class Foo { 
public: 
    virtual void bar(int) {} 
}; 

只刪除參數名稱。

相關問題