Статические члены и ошибка LNK в C ++ - PullRequest
0 голосов
/ 28 октября 2010

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

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

ошибка LNK2001: неразрешенный внешний символ "защищен: статический класс Collection A :: collection"

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

хиджра:

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

a.cpp:

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

Ответы [ 3 ]

5 голосов
/ 28 октября 2010

Вам необходимо добавить

Collection<A*> A::collection;

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

2 голосов
/ 28 октября 2010

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

Collection<A*> A::collection;

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

1 голос
/ 28 октября 2010

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

class A
{
public:
  static Collection<A*>& collection()
  {
    static Collection<A*> singleInstance;
    return singleInstance;
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...