Jimmy Constant
Jimmy Constant

Reputation: 43

Unresolved Externals

I am working on a simple top down shooter and wanted to move my ships to a separate ShipManager class, where I can manage all of them from a single location. However, upon starting this I get a linker error on my playerShip:

error LNK2001: unresolved external symbol "public: static class Ship * ShipManager::playerShip"

ShipManager.h looks like this:

class Ship;

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

I have nothing in the ShipManager .cpp yet. What am I missing? The only other place I use this code is in my game class where I am actually calling ShipManager::playerShip, and I don't get any errors there.

I include "ShipManager.h" in my game.cpp, so it should find it right? I have a feeling I'm forgetting something simple in this class.

Upvotes: 2

Views: 1305

Answers (2)

K-ballo
K-ballo

Reputation: 81389

Static members have to be defined somewhere. You are declaring playerShip, but not defining it. You need to add somewhere, necessarily and only one cpp file:

Ship* ShipManager::playerShip;

Upvotes: 6

Alok Save
Alok Save

Reputation: 206616

You only declared the static member, you also need to define it in (only)one of your cpp files:

Ship* ShipManager::playerShip;

Good Read:
What is the difference between a definition and a declaration?

Upvotes: 4

Related Questions