Ich arbeite an einer Simulation von Arten, wo es einen Spieler in einer 2D Welt von Blöcken gibt. Die vielen Blockobjekte sind in einem Vektor gespeichert, und jeder hat ein Element, das eine Referenz auf diesen Vektor ist, so dass jeder durch die anderen iterieren kann, um Dinge wie Kollisionen zu behandeln. Um die Physik des Spielers mit den Blöcken zu vereinfachen, habe ich die Player-Klasse von der Block-Klasse erben lassen. Während dies die Physik viel einfacher macht, bin ich auf das Problem der Unfähigkeit gestoßen, eine Spielermitgliedfunktion aufzurufen, während ich auf den Spieler vom Vektor verwiesen habe.Aufruf einer Memberfunktion eines geerbten Vektorelements
Hier sind einige vereinfachte Versionen der Klassen:
class Block{
private:
std::vector<Block>& blocks;
public:
Block(std::vector<Block>& b) : blocks(b) {}
};
class Player : public virtual Block{
public:
Player(std::vector<Block>& b) : Block(b) {}
void player_only_function();
};
std::vector<Block> blocks;
Player player(blocks);
blocks.push_back(player);
blocks[0].player_only_function(); // This line in incorrect
Gibt es eine einfache Möglichkeit, dies zu umgehen?
* "Ich habe die Player-Klasse von der Block-Klasse geerbt" * - Das klingt nicht richtig. Öffentliche Vererbung modelliert eine IS-A-Beziehung, und ein Spieler ist kein Block. –