Невозможно преобразовать аргумент 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 шт):
Вот такой минимальный код работает без ошибок:
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;
}
т.е. вы чего-то не дописали нам тут :)
попробуйте для начала создать работоспособный пример с урезанной функциональностью
Проблема оказалась в неправильно поставленных директивах #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"