2011-07-19 95 views
5

我有以下幾點:純虛函數和子函數++未使用的參數用C

class Parent { 
public: 
    virtual bool foo(vector<string> arg1, vector<string> arg2) = 0; 
}; 

class Child : public Parent { 
public: 
    bool foo(vector<string> arg1, vector<string> arg2); 
}; 

// arg1 and arg2 not used - GIVES WARNING 
bool Child::foo(vector<string> arg1, vector<string> arg2) { 
    return false; 
} 

沒有父實施富(...),因爲它是一個純虛函數。父母說foo需要兩個向量參數。這個孩子用兩個字符串參數正確地實現了它,但它們沒有被使用。然而,家長的一些孩子會使用這些論點,所以他們需要永遠在那裏。

有沒有什麼辦法可以使用重載來允許給定的Child類中的foo不具有參數,即使父母說它必須?

非常感謝。

+3

除非你想複製'arg1'和'arg2',更好地const引用傳遞的載體。 – kennytm

+1

這不是一個「超載問題」 - 你在這裏談論一個小警告:-) –

+0

編輯刪除標題超載 - 商定的遺憾:-S。 – ale

回答

18

不指定參數名:

// arg1 and arg2 not used - GIVES WARNING 
bool Child::foo(vector<string>, vector<string>) { 
    return false; 
} 

這應該解決的警告。

如果你的編譯不管出於什麼原因不支持它 - 這樣做:

// arg1 and arg2 not used - GIVES WARNING 
bool Child::foo(vector<string> arg1, vector<string> arg2) { 
    (void)arg1; (void)arg2; // ignore parameters without "unused" warning 
    return false; 
} 
+1

根據您的編譯器,還可以使用一些#pragma語句來禁用此警告。在VC++下:#pragma warning(disable:warningNumber)。在Borland下:#pragma warn -nnn。在GCC下我不知道。 – Shlublu

+1

@Shlublu - 是的,但我認爲抑制警告是一件壞事,最好編寫不生成它們的代碼。在這種情況下,這很容易(雖然第二種解決方案有點「髒」)。 – littleadv

+0

完美謝謝。將接受當stackoverflow的解決方案標記時間限制到期。 – ale