0

I'm quite new to c++ and i'm trying to make a system where I can declare an item to a registry of items so I can call them later by an id. Whenever I change my array pointer to static the program does not compile and errors out with

Error LNK2001 unresolved external symbol "private: static class item * item_registry::m_items" (?m_items@item_registry@@0PAVitem@@A)    NewVoyage   C:\Users\amazo\documents\visual studio 2015\Projects\NewVoyage\NewVoyage\item_registry.obj  1

item_registry.h

#pragma once
#include "item.h"

class item_registry
{
public:
    item_registry();
    ~item_registry();

    static int register_item(item p_item);
    static item get_item(int p_id);

    static void init();

private:
    static int const m_size = 512;
    static item *m_items;


};

item_registry.cpp

#include "item_registry.h"

item_registry::item_registry()
{
}

item_registry::~item_registry()
{
}


void item_registry::init()
{
    item_registry::m_items = new item[item_registry::m_size];
    for (int i = 0; i < item_registry::m_size; i++) 
    {
        item_registry::m_items[i] = item("NULL", -1);
    }
}

int item_registry::register_item(item p_item)
{
    for (int i = 0; i < item_registry::m_size; i++) 
    {
        if (item_registry::m_items[i].get_name() == "NULL" || item_registry::m_items[i].get_value() == -1) 
        {
            item_registry::m_items[i] = p_item;
            return i;
        }
    }
    return -1;
}

item item_registry::get_item(int p_id)
{
    return item_registry::m_items[p_id];
}
Kuliu
  • 171
  • 2
  • 12

1 Answers1

1

Declaring a static member variable won't mean defining it.

Therefore, you will have to define it, say

item *item_registry::m_items;

(note that no static is used in this definition) in item_registry.cpp or somewhere.

MikeCAT
  • 73,922
  • 11
  • 45
  • 70