У меня возникла странная проблема, по которой я не могу найти ответ, и подумал, что я могу спросить.Идентификатор C++ не найден в абстрактном классе
У меня есть абстрактный класс, который проверяет столкновение, который имеет функцию «обновления» и функции «updateX» и «updateY».
class MapCollidable {
public:
MapCollidable(){}
~MapCollidable(){}
void update(const units::Coordinate2D origin, const Rectangle& boundingBox,
Rectangle& collider, units::Coordinate delta, Level* level,
Direction direction, bool moveAlongSlopes=false);
void updateX(const Rectangle& destRect, const Rectangle& boundingBox,
units::Coordinate delta_x, Level* level, bool moveAlongSlopes=false);
void updateY(const Rectangle& destRect, const Rectangle& boundingBox,
units::Coordinate delta_y, Level* level, bool moveAlongSlopes=false);
virtual void onCollision(const CollisionTile::CollisionInfo& collisionInfo) = 0;
virtual void onDelta(const CollisionTile::CollisionInfo& collisionInfo) = 0;
};
Прежде чем я бы просто ребенок вызвать функцию обновления, чтобы сделать проверки столкновений, но в последнее время решил, что я хотел бы добавить updateX и функции updateY. Теперь ребенок вызывает updateX и updateY, которые вызывают обновление. Однако, когда я пытаюсь вызвать обновление внутри updateX или updateY, я получаю сообщение об ошибке «Идентификатор» «undefined».
void updateX(const Rectangle& destRect, const Rectangle& boundingBox,
units::Coordinate delta_x, Level* level, bool moveAlongSlopes=false) {
// Get some things ready to call update...
const units::Coordinate2D origin = units::Coordinate2D(destRect.getLeft(), destRect.getTop());
Direction direction = delta_x < 0 ? LEFT : RIGHT;
Rectangle collider (boundingBox.getLeft() + destRect.getLeft() + delta_x,
boundingBox.getTop() + destRect.getTop(),
direction == LEFT ? (boundingBox.getWidth()/2) - delta_x : (boundingBox.getWidth()/2) + delta_x,
boundingBox.getHeight());
// Trying to call update here gives the error.
update(origin, boundingBox, collider, delta_x, level, direction, moveAlongSlopes);
}
я выбрал через него несколько раз, и я что-нибудь глупое, что я сделал не найти, так почему же не обновляют назвать?
О, боже, спасибо. Я смотрел на него более получаса и совершенно не хватало этого. :) – Claytorpedo
Хороший совет с 'this -> ...' –
Еще одна интересная вещь о 'this': предположим, что у вас есть класс шаблона A и класс класса B, который наследуется от A. Внутри функций-членов B любой член от A должно быть явно указано через 'this'. В противном случае вы получите следующую ошибку (взятую из GCC 4.9) 'нет аргументов для« X », которые зависят от параметра шаблона, поэтому должно быть доступно объявление« X », где' X' - это имя некоторого члена функция/переменная. Что интересно, VC++ принимает такой код. Поэтому, избегая «этого», вы можете очень легко создать очень неуправляемый код. –