我在我的基类中声明了一个函数并指定为虚函数,我试图在派生类中重新声明它,但是我收到了多个声明错误。
有人知道我在这里遗失了什么吗?
class Field {
public:
virtual void display() = 0;
virtual int edit() = 0;
virtual bool editable() const = 0;
virtual void *data() = 0;
virtual Field *clone() const = 0;
};
class LField : public Field {
int rowNum;
int colNum;
int width;
char *val;
bool canEdit;
int index;
public:
virtual void *data() { return val; }
};
class IVField : public LField {
void (*ptrFunc)(void *);
bool (*ptrValid)(int &);
int *data;
public:
void* data() {
return data;
}
};
class DVField : public LField {
int decimalsToDisplay;
double *data;
void (*ptrFunc)(void *);
bool (*ptrValid)(double&);
public:
void* data() {
return data;
}
};
答案 0 :(得分:4)
您在同一个类中有一个名为data
的函数和一个名为data
的成员变量。这是不允许的。为您的成员变量选择一个不同的名称。
您似乎也在重新声明许多成员变量。这可能不是你想要做的。如果要在基类中声明它们并在后代中使用它们,那么它们应该具有 protected 可见性。当您未指定任何其他类时,类的默认可见性是私有,这意味着,例如,IVField
的后代(例如DVField
)无法访问您在ptrFunc
中声明的IVField
变量。您在ptrFun
中声明的DVField
变量与父类中声明的变量完全没有关系。使IVField
受保护,然后后代不需要为自己复制声明。
在编译器允许您实例化任何这些类之前,您还必须实现所有其他抽象方法。