【发布时间】:2017-04-03 05:00:53
【问题描述】:
我的代码面临以下问题:
#include <iostream>
using namespace std;
class Base {
public:
virtual void sayHello()=0;
};
class Impl1 : public Base {
public:
void sayHello() { cout << "Hi from Impl1" << endl; }
};
class Impl2 : public Base {
public:
void sayHello() { cout << "Hi from Impl2" << endl; }
};
void sayHello(Impl1 *i) {
cout << "Impl1 says: ";
i->sayHello();
}
void sayHello(Impl2 *i) {
cout << "Impl2 says: ";
i->sayHello();
}
int main()
{
Impl1 *i1 = new Impl1();
Base *b = i1;
sayHello(b);
return 0;
}
编译器在这里抱怨sayHello(b); 行
代码。
“重载 'sayHello(Base*&)' 的调用不明确”
有没有办法解决这个问题?
编辑:
我基本上想将我的对象传递给一个函数,该函数根据对象的类型进行一些计算。我的对象故意缺少信息以进行所需的计算。所以 Impl1 和 Impl2 只包含一些基本数据,不知道进行计算所需的更多数据。
【问题讨论】:
-
您没有将
Base *作为参数的 sayHello 函数。
标签: c++ overloading derived-class