Я новичок в C ++ и пытаюсь разработать 2D-симуляцию, в которой каждый представленный элемент является подклассом Point.У меня есть несколько списков для каждого подкласса (listA, listB ...).
Я пытаюсь реализовать функцию, которая находит ближайшую точку к текущей точке, например, какой экземпляр B является ближайшим ктекущий экземпляр.Для меня имеет смысл поместить эту функцию в класс Point, поскольку она может использоваться каждым подклассом, но поскольку моя программа использует списки специализированных элементов (std::list<A>
вместо std::list<Point>
), я получаю сообщение об ошибке со следующим кодом:
class Point
{
Point* findClosest(std::list<Point*>&);
};
class A : public Point
{
void update(std::list<B*>&);
};
class B : public Point
{
};
void A::update(std::list<B*>& blist)
{
B* closest = this->findClosest(blist); //bug
// do something...
}
Сообщение об ошибке:
error: no matching function for call to ‘A::findClosest(std::__cxx11::list<A*>&)’
note: no known conversion for argument 1 from ‘std::__cxx11::list<A*>’ to ‘std::__cxx11::list<Point*, std::allocator<Point*> >&’
Если бы я использовал списки Point вместо списков специализированных элементов, это будет работать, но я был бы вынужден приводить элементы этих списков каждый раз, когда мне нужно использовать метод, специфичный для класса (например, update()
для класса A).
Есть ли способ, которыймой список A можно интерпретировать как список Point?
Спасибо за помощь!