这可能是一个noob问题,抱歉.我最近遇到了一个奇怪的问题,试图在c ++,函数重载和继承中搞乱一些高级的东西.
我将展示一个简单的例子,只是为了证明这个问题;
有两个班,classA和classB如下;
class classA{
public:
void func(char[]){};
};
class classB:public classA{
public:
void func(int){};
};
Run Code Online (Sandbox Code Playgroud)
据我所知classB,现在应该拥有两个func(..)函数,由于参数不同而重载.
但是在主方法中尝试这个时;
int main(){
int a;
char b[20];
classB objB;
objB.func(a); //this one is fine
objB.func(b); //here's the problem!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给出了错误,因为void func(char[]){}; 超类中的方法classA在派生类中是不可见的classB.
我怎么能克服这个?这不是在c ++中如何重载?我是c ++的新手,但在Java中,我知道我可以使用这样的东西.
为什么C++编译器会出现此错误?为什么我可以从B访问lol(),但无法访问rofl()[不带参数].捕获量在哪里?
class A
{
public:
void lol(void) {}
void rofl(void) { return rofl(0);}
virtual void rofl(int x) {}
};
class B : public A
{
public:
virtual void rofl(int x) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.lol();
a.rofl(1);
a.rofl();
B b;
b.lol();
b.rofl(1);
b.rofl(); //ERROR -> B::rofl function does not take 0 arguments
return 0;
}
Run Code Online (Sandbox Code Playgroud)