Как исправить подкласс diamond в cocosdx

#c

#c

Вопрос:

У меня есть базовый класс:

 class MTBGameObject : public CCNodeRGBA
  

и я создал два других класса:

 class MTBGamePlayer : virtual public MTBGameObject, virtual public CCSprite
class MTBGameObstacle : virtual public MTBGameObject
  

Но теперь я не могу использовать какое-либо свойство MTBGamePlayer, и я не могу его использовать.

Комментарии:

1. он не использует problem, поскольку это запрещенное слово в названии вопросов!

2. @mc110 Действительно? Какой отличный пример того, почему черные списки являются плохим решением практически любой проблемы.

Ответ №1:

Я искал решение этой проблемы, но ничего не смог найти.. Итак, я пришел к этому решению, я знаю, что оно не самое лучшее, но если оно не работает нормально.

 class MTBGameObject {
    ...
    virtual CCNodeRGBA* self() = 0;
}
  

а затем в дочерних классах я должен переопределить функцию self:

 class MTBGamePlayer : public MTBGameObject, public CCNodeRGBA {
    ...
    CCNodeRGBA* MTBGameObstacle::self() {
        CCNodeRGBA* node = dynamic_cast<CCNodeRGBA*>(this);
        return node;
    }
}

class MTBGameObstacle : public CCSprite, public MTBGameObject {
    ...
    CCNodeRGBA* MTBGamePlayer::self() {
        CCNodeRGBA* node = dynamic_cast<CCNodeRGBA*>(this);
        return node;
    }   
}