g++在基类中找不到重载函数
g++ does not find overloaded function in base class
下面的代码不能在(GCC) 4.8.2中编译。它的报错是这样的:
错误:调用classderivedderived::dump(int)没有匹配的函数
#include <iostream>
class classbase{
public:
void print() {std::cout << "basen";}
virtual void dump() = 0;
void dump(int i) {std::cout << i << " blechn";}
int i;
};
class classderived : public classbase {
public:
int ii;
};
class classderivedderived : public classderived {
public:
void dump() {std::cout << "blahn"; dump(10);}
int iii;
};
int main() {
classderivedderived yellow;
yellow.i = 5;
yellow.dump();
}
编译并运行
(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)
是classderived的成员函数
是的,这应该发生,因为您在classderivedderived
中重新声明另一个名为dump()
的函数是隐藏继承的dump(int)
。拥有不同的签名并不重要,它是隐藏的。
使用using
:
class classderivedderived : public classderived
{
public:
using classderived::dump;
void dump() {std::cout << "blahn"; dump(10);}
int iii;
};
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?