Nightmare1
@Nightmare1
Программист

Почему возникает ошибка?

Machinarium/Classes/Geometry/Primitives/Rectangle.hpp: In instantiation of ‘class Rectangle<unsigned int>’:
Machinarium/Classes/Geometry/Primitives/Rectangle.cpp:33:1:   required from here
Machinarium/Classes/Geometry/Primitives/Rectangle.hpp:16:46: error: invalid abstract return type ‘Axis<unsigned int>’
   16 |   ParameterGetSetTypedClassVariable(Axis<T>, axis);
      |                                              ^~~~


#pragma once 

#ifndef __RECTANGLE__HPP_
#define __RECTANGLE__HPP_

#include "Point.hpp"
#include "Axis.hpp"

/**
 * @brief Класс двумерной ограниченной плоскости.
 * 
 * @tparam T 
 */
template<typename T> class Rectangle : public Point2D<T>
{
  ParameterGetSetTypedClassVariable(Axis<T>, axis);
  ParameterGetSetTyped(T, w, 0);
  ParameterGetSetTyped(T, h, 0);


#define ParameterGetSetTypedClassVariable(var_type, name)           \
private:                                                            \
    var_type __ ## name;                                            \
public:                                                             \
    inline var_type name (var_type value) {                         \
        set_ ## name(value);                                        \
        return value;}                                              \
    inline const var_type & get_ ## name () const {return this->__ ## name;} \
    inline void set_ ## name (var_type value) {__ ## name = value;}


template<typename T> class Axis : public IShape<T>
{
  ParameterGetSetTypedClassVariable(Point2D<T>, position);
  ParameterGetSetTyped(T, rotation, 0);

  public:
    Axis(T rotation, Point2D<T> position);

    inline virtual std::string getShapeName();
    virtual void draw()  const;
    virtual inline T perimeter();
    virtual inline T area();
};
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
invalid abstract return type ‘Axis<unsigned int>’
Почему возникает ошибка?

Потому что Axis<unsigned int> -- абстрактный тип, а ты пытаешься вернуть объект такого типа.
Скажи, что конкретно в сообщении об ошибке непонятно?
Что с этим делать?
- если тип не должен быть абстрактным -- смотреть в его иерархию наследования, искать недоопределённые чистые виртуальные функции и определять их или выкидывать.
- если тип должен быть абстрактным -- пересмотреть свои взгляды на жизнь и начать возвращать либо ссылки, либо указатели на объекты абстрактного типа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы