2011-07-19 51 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