2013-08-19 4 views
0

В какой-то код, который несколько лет назад могут быть скомпилированы, теперь им с ошибками, вот строка:СТЛ вектор указателей initilaziation

std::vector<aRequest*> requests(aCount, NULL); 

, кажется, что кто-то хочет, чтобы инициализировать вектор размера ACount (type long), и каждый указатель хочет инициализировать значение null. Глядя на СТЛ documetation, в этом случае, кто-то пытается использовать заливки конструктор:

explicit vector (size_type n, const value_type& val = value_type(), 
       const allocator_type& alloc = allocator_type()); 

Constructs a container with n elements. Each element is a copy of val

Мой компилятор дает мне ошибки:

In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/vector:65, 
       from server/ServerCreator.h:29, 
       from server/ServerApplication.h:31, 
       from server/ServerApplication.cpp:24: 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h: In member function âvoid std::vector<_Tp, _Alloc>::_M_initialize_dispatch(_Integer, _Integer, std::__true_type) [with _Integ er = long int, _Tp = ToolboxServer::aRequest*, _Alloc = std::allocator<ToolboxServer::aRequest*>]: 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:303: instantiated from âstd::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = long int, _Tp = ToolboxServer::aRequest*, _Alloc = std::allocator<ToolboxServer::aRequest*>] 
server/ServerApplication.cpp:1056: instantiated from here 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:991: error: invalid conversion from long int to ToolboxServer::aRequest* 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:991: error: initializing argument 2 of âvoid std::vector<_Tp, _Alloc>::_M_fill_initialize(size_t, const _Tp&) [with _Tp = ToolboxServer::aRequest*, _Alloc = std::allocator<ToolboxServer::aRequest*>] 
make: *** [bin/Debian/x86/GCC4/2.6/Release/ServerApplication.o] Error 1 

Таким образом, чтобы исправить это будет я просто удалите NULL и используйте конструктор векторов по умолчанию, или есть какой-либо другой параметр, чтобы инициализировать каждый указатель в этом векторе до NULL?

касается J.

+1

Просто 'STD :: вектор запросов (ACount)' будет инициализировать вектор держать 'нулевые указатели aCount'. – juanchopanza

+1

В любом случае, предпочитайте использовать nullptr вместо NULL – Jiwan

+1

@Jiwan, за исключением случаев, если у вас нет поддержки на C++ 11. – juanchopanza

ответ

1

Проблема заключается в том, что NULL просто 0, который не интерпретируется как указатель. Вам нужно будет отправить его в aRequest*.

std::vector<aRequest*> requests(aCount, static_cast<aRequest*>(NULL));

Вы также можете использовать nullptr в C++ 11 или просто ничего, как было предложено комментаторам.

std::vector<aRequest*> requests(aCount, nullptr);

std::vector<aRequest*> requests(aCount);

+1

Это может сработать, но не нужно. – juanchopanza

+3

Почему бы не использовать nullptr? – Jiwan