代码如下:
class Base
{
virtual void SetDistance(int dist);
void SetDistance(int p1,int p2) {
SetDistance(p2-p1);
}
};class Derive : public Base
{
int distance;
void SetDistance(int dist) {
distance=dist;
}
};int main(int argc, char* argv[])
{
int a=1,b=3;
Derive d;
d.SetDistance(a,b);     //这一句不能通过编译“error C2660: 'SetDistance' : function does not take 2 parameters” return 0;
}
除了将函数改名以外,最好的解决办法是什么?

解决方案 »

  1.   


    class Base
    {
    public:
    virtual void SetDistance(int dist);
    void SetDistance(int p1,int p2) {
    SetDistance(p2-p1);
    }
    };class Derive : public Base
    {
    public:
    int distance;
    void SetDistance(int dist) {
    distance=dist;
    }
    };
      

  2.   

    zj888(zj888),你的方法我也尝试了,不可行,下面是报错信息:D:\VerInfo\VerInfoDlg.cpp(152) : error C2660: 'SetDistance' : function does not take 2 parameters
      

  3.   

    class Base
    {
    public:
    virtual void SetDistance(int dist)=0;
    void SetDistance(int p1,int p2) {
    SetDistance(p2-p1);
    }
    };class Derive : public Base
    {
    public:
    int distance;
    void SetDistance(int dist) {
    distance=dist;
    }
    };int main(int argc, char* argv[])
    {
    int a=1,b=3;
    Derive d;
    Base *p;
    d.SetDistance(a);     //这一句不能通过编译“error C2660: 'SetDistance' : function does not take 2 parameters”
    p=(Base*)&d;
    p->SetDistance(a,b); 
    return 0;
    }
    //强制转换为基类可以的
      

  4.   

    int main(int argc, char* argv[])
    {
    int a=1,b=3;
    Derive d;
    ((Base*)&d)->SetDistance(a,b);
    return 0;
    }
      

  5.   

    用基类指针强制类型转换是可以,不过不太安全,调用以前最好用dynamic_cast判断一下……
      

  6.   

    被 隱藏了這是基本得C++語法問題
    1. 如果是virtual 那麼被改寫,但通過指針 或引用仍然可以調用
    2.  否則 被同名函數隱藏. 不能直接通過對象調用
      

  7.   

    要么强制转换类型要么写成Virtual