2016-10-11 5 views
0

У меня есть класс, назовем его Foo Foo не компилируется, когда я включаю следующую строку в класс в заголовке.C++ static vs non static class members

static std::vector<UnvalidatedSocket*> unvalidatedSockets; 

и следующая строка в cpp.

  Foo::unvalidatedSockets.push_back(new UnvalidatedSocket(ClientSocket)); 

, когда я беру static ключевое слово прочь компилирует просто отлично. Я проверил круглые, но их нет.

Ошибка LNK2001, unresolved external symbol

Почему это происходит? Включить ли статические члены класса раньше?

+1

Статические элементы должны быть инициализированы не только объявленными. Добавьте 'std :: vector Foo :: unvalidatedSocket;' в ваш файл cpp. – Quest

+1

Не говорите никому, какую ошибку вы получаете, это было бы гораздо интереснее для людей, чтобы догадаться ... – Slava

+0

Darnit .. Мне действительно не нравится, что вам нужно удвоить объявление в C++. (Ну, на самом деле не объявляйте двойное объявление.) Кажется, что все еще есть материал, который может изучить javadevelopper. – blipman17

ответ

1

Вам необходимо инициализировать свой статический член где-то в файле CPP, прежде чем пытаться что-то на него нажимать. Добавьте примерно следующее:

std::vector<UnvalidatedSocket*> Foo::unvalidatedSockets; 
+0

Вы пытались скомпилировать это? – Slava

+0

Нет необходимости в '= std :: vector()', это будет автоматически построено по умолчанию. Не обращайте внимания на то, что он неполный. –

+0

@Slava Конечно, у меня нет кода OP, поэтому мне нечего компилировать ... Если синтаксис выключен, я буду рад исправить его. – Brick