我在编译时得到这个错误,->不能将字段M1::sc声明为抽象类型I1,因为下面的虚函数在I1中是纯的。请帮帮忙。
class I1
{
public:
virtual void a(int dir) = 0;
virtual void b() = 0;
virtual void c() = 0;
void a(int dir) {
....
}
void b() {
....
}
void c() {
....
}
};
class I2 : public I1
{
public:
void a(int dir) {
....
}
void b() {
....
}
void c() {
....
}
};
class M1 : public G1
{
protected:
I1 sc;
public:
int dir = 4;
sc.a(dir);
};
完整的代码可以在http://pastebin.com/PFrMTJuF上找到。
发布于 2010-11-28 18:07:45
I1
是一个抽象类,因为它有纯粹的虚函数(=没有定义的函数)。
您不能创建抽象类的实例(因为它们是如何工作的?!),因此像I1 a
这样的声明不起作用。
在您对问题进行编辑之后,似乎I1
不应该是一个抽象类,因为您提供了方法的定义。如果是这种情况,只需删除方法声明后的= 0
即可使代码正常工作。
发布于 2010-11-28 18:13:31
您不能创建实例到抽象类(具有一个或多个纯虚函数的类)。还有另一个问题。当你在类声明中调用函数sc.a(dir)
时,你希望编译器做什么?行dir = 4
也不正确,在类声明中只能初始化类的静态常量成员。
https://stackoverflow.com/questions/4296276
复制相似问题