多功能声明

时间:2010-06-26 16:27:13

标签: c++ inheritance

我在我的基类中声明了一个函数并指定为虚函数,我试图在派生类中重新声明它,但是我收到了多个声明错误。

有人知道我在这里遗失了什么吗?

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;
        }

};

1 个答案:

答案 0 :(得分:4)

您在同一个类中有一个名为data的函数和一个名为data的成员变量。这是不允许的。为您的成员变量选择一个不同的名称。

您似乎也在重新声明许多成员变量。这可能不是你想要做的。如果要在基类中声明它们并在后代中使用它们,那么它们应该具有 protected 可见性。当您未指定任何其他类时,类的默认可见性是私有,这意味着,例如,IVField的后代(例如DVField)无法访问您在ptrFunc中声明的IVField变量。您在ptrFun中声明的DVField变量与父类中声明的变量完全没有关系。使IVField受保护,然后后代不需要为自己复制声明。

在编译器允许您实例化任何这些类之前,您还必须实现所有其他抽象方法。