use*_*939 1 c++ inheritance gcc
以下不用(GCC)4.8.2编译.它抱怨这样:
错误:没有匹配函数来调用'classderivedderived :: dump(int)'
#include <iostream>
class classbase{
public:
void print() {std::cout << "base\n";}
virtual void dump() = 0;
void dump(int i) {std::cout << i << " blech\n";}
int i;
};
class classderived : public classbase {
public:
int ii;
};
class classderivedderived : public classderived {
public:
void dump() {std::cout << "blah\n"; dump(10);}
int iii;
};
int main() {
classderivedderived yellow;
yellow.i = 5;
yellow.dump();
}
Run Code Online (Sandbox Code Playgroud)
它确实编译并运行
(1) dump(10) => classbase::dump(10)
要么
(2) dump(10) => puddledump(10) and void dump(int i) => void puddledump(int i)
这应该发生吗?为什么gcc不能dump(10)根据参数类型解析函数调用,就像任何其他函数调用一样?我认为它将解决该调用,因为它dump(int)是由于开始成为classbase的成员而导致的类的成员函数.
是的,这是假设发生,因为你的另一功能的重新声明命名dump()中classderivedderived被隐藏继承dump(int).拥有不同的签名并不重要,它是隐藏的.
将其纳入范围using:
class classderivedderived : public classderived
{
public:
using classderived::dump;
void dump() {std::cout << "blah\n"; dump(10);}
int iii;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |