При переопределении метода возникает ошибка, указывающая, что он не переопределяется, даже если подпись совпадает с параметрами - PullRequest
0 голосов
/ 17 октября 2019

У меня проблемы с сообщением об ошибке: чисто виртуальная функция: IObject :: toString не имеет переопределения

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

Вот абстрактный класс IObject.h

#pragma once
#ifndef I_OBJECT_H

#define I_OBJECT_H
#include<string>

class IObject
{
public:
    virtual std::string toString() const = 0;
};

#endif // !I_OBJECT_H

* Метод 1014 * является чисто виртуальным и требует переопределения.

Это IComparable , который является потомком IObject.h

#pragma once
#ifndef I_COMPARABLE_H
#define I_COMPARABLE_H

#include "IObject.h"
class IComparable :
    public IObject
{
public:
    virtual int compareTo(IComparable* obj) const = 0;
};


#endif // !I_COMPARABLE_H

И здесь у меня есть Time.h , который переопределяет обе функции compareTo(IComparable* obj) из IComparable.h и toString() из IObject.h

#pragma once
#ifndef TIME_H
#define TIME_H

#include "IComparable.h"

struct Time : public IComparable {
public:
    Time(int aHours, int aMinutes, int aSeconds);
    virtual int compareTo(IComparable* obj) const override;
    virtual std::string toString() const override; // <-- overriden
private:
    int _hours;
    int _minutes;
    int _seconds;

    // custom operators for comparing
    bool operator==(const Time& obj) const;
    bool operator<(const Time& obj) const;
    bool operator>(const Time& obj) const;
};


#endif // !TIME_H

Ошибка отображается в основном здесь (прокомментировано в коде)

#include<iostream>
#include<time.h>
#include "Time.h"
#define ARRAY_SIZE 10

int main() {
    srand(time(NULL));

    IComparable* array = new IComparable[ARRAY_SIZE]; // right before the first brace
// rest of the code...

Есть идеи, почему я получаю эту ошибку, даже если я ее переопределил?

...