2 Stimmen

Nicht aufgelöste Externe

Ich arbeite an einem einfachen Top-Down-Shooter und wollte meine Schiffe in eine separate ShipManager-Klasse verschieben, in der ich sie alle von einem einzigen Ort aus verwalten kann. Allerdings erhalte ich beim Starten dieses Vorgangs einen Verknüpfungsfehler bei meinem playerShip:

Fehler LNK2001: ungelöstes externes Symbol "public: static class Ship * ShipManager::playerShip"

ShipManager.h sieht so aus:

class Ship;

class ShipManager
{
public:
static Ship*    playerShip;
};

Ich habe noch nichts in der ShipManager .cpp. Was fehlt mir hier? Der einzige andere Ort, an dem ich diesen Code verwende, ist in meiner Spielklasse, in der ich tatsächlich ShipManager::playerShip aufrufe, und dort erhalte ich keine Fehlermeldungen.

Ich habe "ShipManager.h" in meinem game.cpp eingebunden, also sollte es es doch finden, oder? Ich habe das Gefühl, dass ich in dieser Klasse etwas simples vergesse.

6voto

K-ballo Punkte 79342

Statische Member müssen irgendwo definiert werden. Du deklarierst playerShip, aber definierst es nicht. Du musst an einer Stelle, notwendigerweise und nur einer cpp-Datei, hinzufügen:

Ship* ShipManager::playerShip;

4voto

Alok Save Punkte 196241

Sie haben nur das statische Element deklariert, Sie müssen es auch in (nur) einer Ihrer cpp-Dateien definieren:

Ship* ShipManager::playerShip;

Gute Lektüre:
Was ist der Unterschied zwischen einer Definition und einer Deklaration?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X