Статические элементы и ошибка LNK в C++

У меня есть класс со статическим членом, который я хочу использовать в конструкторе класса, но код не компилируется, и у меня остаются следующие ошибки:

фатальная ошибка LNK1120: 1 неразрешенный внешний

ошибка LNK2001: неразрешенный внешний символ «защищено: коллекция статического класса A:: collection»

Любая помощь будет оценена. Спасибо.

a.h:

class A
{
protected:
 static Collection<A*> collection;
};

a.cpp:

A::A() {
 A::collection.push_back(this);
}

person Andrew    schedule 28.10.2010    source источник
comment


Ответы (3)


Вам нужно добавить

Collection<A*> A::collection;

в ваш файл a.cpp.

person harper    schedule 28.10.2010

В вашем .cpp вам нужно добавить:

Collection<A*> A::collection;

.h только объявил, что где-то будет копия. Вам необходимо предоставить эту копию в файле .cpp.

person Mark Ransom    schedule 28.10.2010

в качестве альтернативы, если вы не хотите помещать эту строку в файл cpp, вы можете использовать статический метод, который возвращает ссылку на статический экземпляр... т.е.

class A
{
public:
  static Collection<A*>& collection()
  {
    static Collection<A*> singleInstance;
    return singleInstance;
  }
};
person Nim    schedule 28.10.2010