我有一個基類,它有虛函數。問題在於,允許基礎實例化,但這意味着它的所有功能都需要定義。這會導致編譯器警告我有關未使用的參數。我能做些什麼來正確地擺脫這些警告,而不是使用純虛擬函數並將其變爲抽象類?Fixng未使用的正式參數警告,而沒有抽象類
例如:
class Foo {
public:
virtual void bar(int x) {} //unused formal parameter int x
}
由於
我有一個基類,它有虛函數。問題在於,允許基礎實例化,但這意味着它的所有功能都需要定義。這會導致編譯器警告我有關未使用的參數。我能做些什麼來正確地擺脫這些警告,而不是使用純虛擬函數並將其變爲抽象類?Fixng未使用的正式參數警告,而沒有抽象類
例如:
class Foo {
public:
virtual void bar(int x) {} //unused formal parameter int x
}
由於
通常的解決辦法是:
virtual void bar(int x) { (void)x; }
或:
virtual void bar(int) {}
這防止編譯器哀。請注意,此技術不限於虛擬成員函數;它應該適用於你不打算使用一個或多個參數的任何函數。
在不相關的說明上;一個具有空成員函數定義的可實例化基類聽起來不是一個好主意;你確定只是把它抽象出來會更好嗎?
對於它的價值,另一種方法是:
virtual void bar(int /*x*/) {}
是否有使用絕對最明顯的解決方案有問題嗎?
class Foo {
public:
virtual void bar(int) {}
};
只刪除參數名稱。
刪除功能? – 2010-11-06 23:05:16
@PigBen:然後他們不會是可以通過指針到基地調用的虛擬方法。 – 2010-11-06 23:06:39
這是一個代碼氣味。爲什麼虛擬功能不是純粹的? = 0。 – 2010-11-06 23:13:23