错误 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()

我不知道您在编写代码时的期望是什么,但它工作正常。

在初始化期间,您已将指针从 Saba 转换为 Aba in:

Aba* abaPtr = dynamic_cast<Aba*>(sabaPtr);

所以,abaPtr 是正确的 Aba 对象(当然,如果动态转换成功的话)。接下来,在行

abaPtr->f();

您正在调用 Aba::f(int),它期望指定 1 个参数,而您没有指定它。

Aba::f,带1个参数,隐藏了Saba::f。这就是为什么当您不带参数调用 Aba::f 时编译器会抱怨的原因。仅供参考,clang 给了我这些警告:

main.cpp:38:18: warning: 'Aba::f' hides overloaded virtual function [-Woverloaded-virtual]

virtual void f(int){ cout << "Aba f(int)" << endl; }
             ^

main.cpp:38:18: note: hidden overloaded virtual function 'Aba::f' declared here: different number of parameters (1 vs 0)

virtual void f(int){ cout << "Aba f(int)" << endl; }