Re: pure virtual functions and name injection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the answer, but everything is not yet absolutely clear to me:

Why should I inject the "foo" name from a into b ?
So that the compiler can find b::foo();
I agree, but what surprised me is that it is necessary. I have a long experience with C++, and it is the first time that I do not understand why it can't resolve a name. It is a use of "using" that I was not aware of.

Different prototypes, but the same name. The name is what is causing the error, not the rest of the signature.
But gcc internally use name mangling according to the prototype, right ? So that I would have expect a real call to foo() to be explicit enough to resolve.

To avoid this kind of situation, I recommend using a different method name for the method with the different signature.
Agreed, but my problem here is to understand before :-)

Then it compiles but there is a *link* error ! Can somebody explain me what happens ?
You have not defined the a::foo function anywhere. So there is a link error.
Certainly, but in this case, I was rather expecting a compile error, claiming that the pure virtual method had no body. On the contrary, gcc has accepted it, so that I thought that it has found the right foo () !

Regards,

Pierre Chatelier

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux