Многократное объявление для функции - PullRequest
0 голосов
/ 26 июня 2010

У меня есть функция, объявленная в моем базовом классе и указанная как виртуальная, я пытаюсь повторно объявить ее в производном классе, но получаю ошибку множественного объявления.

Кто-нибудь знает, если я что-то здесь упускаю?

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 Ответ

4 голосов
/ 26 июня 2010

У вас есть функция с именем data и переменная-член с именем data в одном классе.Это не разрешеноВыберите другое имя для своей переменной-члена.

Вы также, кажется, повторно объявляете много переменных-членов.Это, вероятно, не то, что вы хотите сделать.Если вы хотите объявить их в базовом классе и использовать их в потомках, то они, вероятно, должны иметь видимость protected .Видимость по умолчанию для классов, если вы не указали других, - private , что означает, например, что потомки IVField (например, DVField) не могут получить доступ к переменной ptrFuncВы заявили в IVField.Переменная ptrFun, которую вы объявили в DVField, не имеет абсолютно никакого отношения к переменной, объявленной в родительском классе.Сделайте IVField один защищенным, и потомкам не нужно будет дублировать объявление для себя.

Вам также придется реализовать все эти другие абстрактные методы, прежде чем компилятор позволит вам создать экземплярлюбой из этих классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...