crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QVector как аргумент функции., Почему ругается?
smartchecker
  опции профиля:
сообщение 17.10.2013, 14:18
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 83
Регистрация: 7.9.2011
Пользователь №: 2853

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть ф-ция
void someFunc(QVector<int> someData);

когда пытаюсь сделать так
someFunc({1,2,3});

Ругается no matching function for call to "someFunc(<brace-enclosed initializer list>)"
no known conversation for argument 1 from '<brace-enclosed initializer list>' to QVector<int>

Что не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 17.10.2013, 14:47
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


компилятор не понял, что ты ему подсунул. сделай явное приведение типа, если Qt это умеет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.10.2013, 17:35
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(smartchecker @ 17.10.2013, 16:18) *
когда пытаюсь сделать такsomeFunc({1,2,3});
а что это собственно за билеберда в фигурных скобках?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 25.10.2013, 9:27
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


{...} - это список инициализации для статического массива, вектор не умеет его принимать, так как этот список разбирается на этапе компиляции, а не в рантайме

а вот так должно сработать

int init[]={1,2,3};
std::vector<int> v(init,init+sizeof(init)/sizeof(*init))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.10.2013, 9:21
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


вообще иницализацию в Си++ принято делать через конструктор класса.

Для контейнеров Qt можно использовать такой способ:
someFunc(QVector<int>() << 1 << 2 << 3);

где QVector<int>() - конструктор класса (создаём временный объект),
затем воспользовавшись оператором
QVector<T> & QVector::operator<< ( const T & value )
добавляем во временный объект элементы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 9:08