错误 C2660:'Aba::f':函数不接受 0 个参数
error C2660: 'Aba::f' : function does not take 0 arguments
我想知道为什么在下面的函数中有一个错误:
#include<iostream>
using namespace std;
class Saba
{
public:
Saba(){ cout << "Saba Ctor" << endl; }
Saba(const Saba& a){ cout << "Saba Copy Ctor" << endl; }
~Saba(){ cout << "Saba Dtor" << endl; }
virtual void f(){ cout << "Saba f()" << endl; }
virtual void g(){ cout << "Saba g()" << endl; }
void h(){ cout << "Saba h()" << endl; }
};
class Aba : public Saba
{
public:
Aba(){ cout << "Aba Ctor" << endl; }
Aba(const Aba& a){ cout << "Aba Copy Ctor" << endl; }
~Aba(){ cout << "Aba Dtor" << endl; }
virtual void g(){ cout << "Aba g()" << endl; }
virtual void f(int){ cout << "Aba f(int)" << endl; }
virtual void h(){ cout << "Aba h()" << endl; }
};
class Son : public Aba
{
public:
Son(){ cout << "Son Ctor" << endl; }
Son(const Son& a){ cout << "Son Copy Ctor" << endl; }
~Son(){ cout << "Son Dtor" << endl; }
void f(){ cout << "Son f()" << endl; }
void h(){ cout << "Son h()" << endl; }
};
int main()
{
Saba* sabaPtr = new Son();
Aba* abaPtr =dynamic_cast<Aba*>(sabaPtr);
abaPtr->f();
abaPtr->g();
abaPtr->h();
delete sabaPtr;
return 0;
}
我得到一个错误"错误C2660: 'Aba::f':函数不接受0个参数"。但是"aba"继承自"saba"所以他可以使用"saba"的f()
Aba::f
,接受1个参数,隐藏Saba::f
。这就是为什么当你调用Aba::f
没有参数编译器抱怨。只是为了你的信息,clang给了我那些警告:
main.cpp:38:18: warning: 'Aba::f'隐藏了重载的虚函数[- woverload -virtual]
virtual void f(int){ cout << "Aba f(int)" << endl; }
^
main.cpp:38:18:注意:这里声明了隐藏的重载虚函数'Aba::f':不同数量的形参(1 vs 0)
virtual void f(int){ cout << "Aba f(int)" << endl; }
我不知道你在写代码的时候期望什么,但是它能正常工作。
在初始化期间,您已经将指针从Saba
转换为Aba
:
Aba* abaPtr = dynamic_cast<Aba*>(sabaPtr);
所以,abaPtr
是合适的Aba
对象(当然如果动态强制转换成功的话)。接下来,在
abaPtr->f();
你正在调用Aba::f(int)
,它期望指定一个参数,而你没有指定它。
相关文章:
- 函数不接受 X 参数,函数使用默认参数
- 为什么不接受具有默认分配参数的函数作为 0-arg 生成器?
- 函数不接受 C++ 参数
- SQLHANDLE-Parameters:函数不接受x个参数(但实际上确实如此)
- 函数不接受 1 个参数
- 为什么析构函数不接受C++中的参数?
- 为什么C++可变参数模板不接受 iostream 值作为参数?
- C++:将引用作为参数传递,但该函数不接受引用作为参数
- 我的构造函数方法不接受参数(DirectX / Windows)
- 可变参数模板化构造函数不接受 x 参数
- 为什么 std::is_invocable 不接受非类型模板参数
- 错误 C2660:'MouseListener::MousePressed':函数不接受 4 个参数
- 不接受静态成员函数作为 constexpr 参数
- 方法指针映射,编译器说他们不接受任何参数
- GCC 不接受默认模板参数中的包扩展
- 为什么Clang和VS2013接受移动大括号初始化的默认参数,而不接受GCC 4.8或4.9
- C++ 中的特征库给出错误 C2660:"特征::矩阵基<Derived>::特征值":函数不接受 2 个参数
- strtrok_s函数不接受2个参数
- 函数不接受一个参数
- 带有 const 参数的方法不接受非 const 参数