Неверный ковариантный тип возвращаемого значения для [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Неверный ковариантный тип возвращаемого значения для [дубликат]

Сообщение Anonymous »

Рассмотрим следующий пример, который является частью более крупной кодовой базы, в getInstance(). Если я не возвращаю указатель на производный класс, т. е. просто void или int или другой тип, компиляция Это хорошо. Но я хочу вернуть указатель на производный тип. Все еще не уверены, в чем может быть проблема?
#include
#include

namespace mpc_local_planner {

// Base Abstract Class
class StageInequalityBase {
public:
using Ptr = std::shared_ptr;

virtual Ptr getInstance() const = 0; // Pure virtual function
virtual void somePureVirtualFunction() const = 0; // Another pure virtual function

virtual ~StageInequalityBase() = default; // Ensure a virtual destructor
};

// Intermediate Abstract Class
class IntermediateStageInequality : public StageInequalityBase {
public:
using Ptr = std::shared_ptr;

virtual Ptr getInstance() const = 0; // Pure virtual function in intermediate class
virtual void anotherPureVirtualFunction() const = 0; // Additional pure virtual function
};

// Derived Class
class StageInequalityMultipleShoothingSE2 : public IntermediateStageInequality {
public:
using Ptr = std::shared_ptr;

Ptr getInstance() const override {
return std::make_shared();
}

void somePureVirtualFunction() const override {
std::cout getInstance();
instance->somePureVirtualFunction();
instance->anotherPureVirtualFunction();

return 0;
}

Вот какую ошибку я получаю
/tmp/cjQvg2FHbj.cpp:22:25: error: invalid covariant return type for 'virtual mpc_local_planner::IntermediateStageInequality::Ptr mpc_local_planner::IntermediateStageInequality::getInstance() const'
22 | virtual Ptr getInstance() const = 0; // Pure virtual function in intermediate class
| ^~~~~~~~~~~
/tmp/cjQvg2FHbj.cpp:11:25: note: overridden function is 'virtual mpc_local_planner::StageInequalityBase::Ptr mpc_local_planner::StageInequalityBase::getInstance() const'
11 | virtual Ptr getInstance() const = 0; // Pure virtual function
| ^~~~~~~~~~~
ERROR!
/tmp/cjQvg2FHbj.cpp:31:17: error: invalid covariant return type for 'virtual mpc_local_planner::StageInequalityMultipleShoothingSE2::Ptr mpc_local_planner::StageInequalityMultipleShoothingSE2::getInstance() const'
31 | Ptr getInstance() const override {
| ^~~~~~~~~~~
/tmp/cjQvg2FHbj.cpp:22:25: note: overridden function is 'virtual mpc_local_planner::IntermediateStageInequality::Ptr mpc_local_planner::IntermediateStageInequality::getInstance() const'
22 | virtual Ptr getInstance() const = 0; // Pure virtual function in intermediate class
| ^~~~~~~~~~~


Подробнее здесь: https://stackoverflow.com/questions/787 ... n-type-for

Вернуться в «C++»