Виртуальная функция не ковариантна с типом возврата функции, которую она переопределяет

У меня есть следующий код:

class ExtensionFactory {
public:
explicit ExtensionFactory( const std::string& i_Name
, const std::string& i_Version
, const std::string& i_Author
, const std::string& i_Type
, const std::vector<std::string>& i_Keys );

virtual ~ExtensionFactory();

};

class IOExtensionFactory : public ExtensionFactory {
public:
explicit IOExtensionFactory( const std::string& i_Name
, const std::string& i_Version
, const std::string& i_Author
, const std::string& i_Type
, const std::vector<std::string>& i_Keys );

virtual ~IOExtensionFactory();

virtual IOExtension* New( const boost::property_tree::ptree::value_type& i_ConfigNode
, boost::mutex& i_LogMutex
, streamlog::severity_log& i_Log
, const boost::shared_ptr<boost::mutex>& i_QueueMutex
, const boost::shared_ptr<ExtensionQueue>& i_Queue ) = 0;

};

class FileReaderFactory : public IOExtensionFactory {
FileReaderFactory();
public:
explicit FileReaderFactory( const std::string& i_Name
, const std::string& i_Version
, const std::string& i_Author
, const std::string& i_Type
, const std::vector<std::string>& i_Keys );

virtual ~FileReaderFactory();

virtual IOExtension* New( const boost::property_tree::ptree::value_type& i_Config
, boost::mutex& i_LogMutex
, streamlog::severity_log& i_Log
, const boost::shared_ptr<boost::mutex>& i_QueueMutex
, const boost::shared_ptr<ExtensionQueue>& i_Queue );

};

Когда я компилирую это, я получаю ковариантную ошибку для FileReaderFactory :: New. Я понятия не имею, почему, поскольку оба FileReaderFactory и IOExtensionFactory имеют одинаковый тип возвращаемого значения.

Любая помощь будет оценена.

-1

Решение

(Перед голосованием, что это не отвечает на его вопрос, это, безусловно, ДЕЛАЕТ. Ответ заключается в том, что в его коде нет проблемы, которую, по его мнению, он имеет.)

Следующий короткий автономный пример НЕ показывает сообщение об ошибке, которое вы получили. Вы должны будете предоставить намного больше деталей.

class IOExtension {
};

class ExtensionFactory {
public:
virtual ~ExtensionFactory();
};

class IOExtensionFactory : public ExtensionFactory {
public:
virtual IOExtension* New() = 0;
};

class FileReaderFactory : public IOExtensionFactory {
FileReaderFactory();
public:
virtual ~FileReaderFactory();

virtual IOExtension* New();
};

int main() {
return 0;
}
0

Другие решения