2015-11-01 3 views
0

Я довольно новичок в C++, и я пытаюсь создать систему, в которой я могу объявить элемент в реестр элементов, чтобы впоследствии я мог их назвать идентификатором. Всякий раз, когда я изменить указатель массива на статику программы не компилирует и ошибок сПроблема с массивом статических указателей

Error LNK2001 unresolved external symbol "private: static class item * item_registry::m_items" ([email protected][email protected]@[email protected]@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]; 
} 

ответ

1

констатирующего статическая переменная-член не будет означать ее определение.

Таким образом, вы должны определить его, скажем

item *item_registry::m_items; 

(обратите внимание, что static не используется в данном определении) в item_registry.cpp или где-нибудь.