Re: Calling inherited protected method fails to compile
* nomad:
Anyone have any idea why the code below fails to compile? I get the following
message when I try:
error C2660: 'B::F' : function does not take 2 arguments.'
Clearly, B should inherit int F(int, int) from A, the function declaration
is not ambiguous in any way, so it seems to me that I should be able to call
it, yet the compiler refuses to allow me to do it. If I explicitly reference
it (i.e., A::F(x, 3) instead of this->F(x, 3)), it works fine.
This is a FAQ (see below).
class A
{
public:
A(void) { };
virtual int F(int x) = 0;
protected:
int F(int x, int y)
{
return x + y;
}
};
class B : public A
{
public:
B(void) { };
virtual int F(int x)
{
return this->F(x, 3);
}
};
int main(void)
This 'void' is a C-ism. Not that it matters much, just a fine detail.
{
B b;
(void) b.F(3);
This cast is completely unnecessary.
}
For your question about why you get a compilation error, see the FAQ
item titled "What's the meaning of, Warning: Derived::f(char) hides
Base::f(double)?", currently item 23.9, available at e.g. <url:
http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9>,
or any mirror.
It's often a good idea to check the FAQ first.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?