Невозможно преобразовать аргумент 1 из объекта класса в "const int"

Имеется класс Falling_shapes с методом void add(const Body&). (для компактности некоторые члены и методы опущены)

class Falling_shapes
{
public:
  void add(const Body&);
};

Также имеется класс, который в деструкторе вызывает эту функцию, передавая в качестве параметра свой член типа Body

class Shape
{
protected:
    Falling_shapes* const sh;
    Body body;
public:
    virtual ~Shape(){ sh->add(body); }
    /*...*/
};

При сборке появилось 9 одинаковых ошибок "void Falling_shapes::add(const int)": невозможно преобразовать аргумент 1 из "Body" в "const int" в месте вызова функции в деструкторе. Пробовал передавать параметр функции через не константную ссылку (изменив сигнатуру функции), тогда появлялось несколько одинаковых ошибок Функция не принимает 1 аргументов. Все нужные заголовки с объявлениями подключены были. На всю программу есть только одна функция с таким именем. От класса Shape публично наследуются 7 классов, которые не переопределяют деструктор. Класс Falling_shapes объявлялся и определялся в разных файлах. Определение метода add:

void Falling_shapes::add(const Body& _body)
{
    shapes.push_back(_body);
    for (size_t i = 0; i != _body.size(); ++i)
        coords.insert(std::make_pair(_body[i].Y, _body[i].X));
}

Ответы (2 шт):

Автор решения: Zhihar

Вот такой минимальный код работает без ошибок:

class Body {
};

class Falling_shapes
{
public:
    void add(const Body&) {
        std::cout << "add" << std::endl;
    }
};

class Shape
{
protected:
    Falling_shapes* const sh = new Falling_shapes();
    Body body;
public:
    virtual ~Shape() { 
        sh->add(body); 
    }
};

int main() {
    Shape* p = new Shape();
    delete p;

    return 0;
}

т.е. вы чего-то не дописали нам тут :)

попробуйте для начала создать работоспособный пример с урезанной функциональностью

→ Ссылка
Автор решения: Daedma

Проблема оказалась в неправильно поставленных директивах #include. Файл "Body.h"

#include "Falling_shapes.h"

Файл "Falling_shapes.h"

#include "Body.h"

Проблема решилась объявлением класса и убиранием директив #include Файл "Body.h" теперь

//#include "Falling_shapes.h"
class Falling_shapes;

"Falling_shapes.h" остался без изменений

#include "Body.h"

В .cpp файлы реализации так же были включены нужные заголовки. Файл "Body.cpp"

#include "Body.h"
#include "Falling_shapes.h"
→ Ссылка