У меня проблемы с сообщением об ошибке: чисто виртуальная функция: 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...
Есть идеи, почему я получаю эту ошибку, даже если я ее переопределил?