Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 21:52   #1
Zefick
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 14
По умолчанию Конфликт конструкторов vector (компилятор MinGW)

Проблема в следующем: когда я объявляю объект класса vector из STL с параметром-указателем и использую для его создания конструктор, который должен заполнять вектор одинаковыми значениями, то компилятор выбирает неправильный конструктор. Например:
Код:
vector<int*> qwe = vector<int*>(10, NULL);
В заголовочном файле я нашел два подходящих конструктора:
Код:
vector(size_type __n, const value_type& __value,
        const allocator_type& __a = allocator_type())      // тот, который должен вызываться

template<typename _InputIterator> vector(_InputIterator __first, _InputIterator __last,
        const allocator_type& __a = allocator_type())      // тот, который вызывается.
Я уже и explicit пробовал во всех конструкторах ставить, только это не помогло, да и исходники библиотеки править это не дело, тем более, что если в соседнем конструкторе explicit стоит, а в остальных нет, то значит так надо.
Zefick вне форума Ответить с цитированием
Старый 18.04.2009, 22:02   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А может стоит попробовать вот так
Код:
std::vector<int*>* qwe = new std::vector<int*>(10, NULL);
То есть через указатель и динамическую память.
MaTBeu вне форума Ответить с цитированием
Старый 18.04.2009, 22:23   #3
Zefick
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 14
По умолчанию

Разницы нет. Вообще если использовать в качестве параметра шаблона не указатель, то все, естественно, работает. А вот с указателем, как мне надо, нет.
Zefick вне форума Ответить с цитированием
Старый 18.04.2009, 23:42   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Ну чисто логически: MinGW что-то мудрит с неявным приведением типов. Поэтому попробуйте явно указать типы параметров:
vector<int*> qwe = vector<int*>((size_type)10, (int*)NULL);
ЗЫ. Visual Studio 2008 этот момент отрабатывает нормально, а MinGW под рукой нет, дабы проверить. Так что возможно не поможет
ЗЫ2. explicit может спасти только от такого: vector<int> qwe = 10, а в вашем случае от его наличия/отсутствия врядли что-то изменится
pu4koff вне форума Ответить с цитированием
Старый 19.04.2009, 08:31   #5
Zefick
Пользователь
 
Регистрация: 27.05.2008
Сообщений: 14
По умолчанию

pu4koff, спасибо, помогло. Достаточно было привести второй аргумент к нужному типу. Видимо компилятор воспринимал NULL не как указатель, а как число 0.
Zefick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
класс Vector fclmhooligan Общие вопросы по Java, Java SE, Kotlin 3 05.04.2011 02:40
Конфликт версий? Bezdar Microsoft Office Excel 8 06.07.2009 17:44
составление запросов в 2003 только при помощи SQL, ни мастеров, ни конструкторов использовать не нужно Baxxter Microsoft Office Access 3 09.12.2008 12:35
fstream.eof() в mingw alexinspir Общие вопросы C/C++ 1 30.09.2008 08:00
Конфликт IP адреса ... Ronni10 Операционные системы общие вопросы 4 28.02.2008 14:14