It must be something specific in my code, which I can’t post. But maybe someone can suggest possible causes.
Basically I have:
class CParent
{
public:
void doIt(int x);
};
class CChild : public CParent
{
public:
void doIt(int x,int y,int z);
};
CChild *pChild = ...
pChild->doIt(123); //FAILS compiler, no method found
CParent *pParent = pChild;
pParent->doIt(123); //works fine
How on earth?
EDIT: people are talking about shadowing/hiding. But the two versions of doIt have different numbers of parameters. Surely that can’t confuse the compiler, overloads in child class which can’t possibly be confused with the parent class version? Can it?
The compiler error I get is:
error C2660: ‘CChild::doIt’ : function does not take 1 argument
You have shadowed a method. For example:
You can fix this with a
usingdirective:Since you seem insistent about the number of parameters, I’ll address that. That doesn’t change anything. Observe:
It will still be shadowed regardless of parameters or return types; it’s simply the name that shadows.
using base::<x>;will bring all ofbase‘s “<x>” methods into visibility.