crossplatform.ru

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

> QVector<T>, если T не имеет конструктора по-умолчанию, заполнение элементов
AD
  опции профиля:
сообщение 7.7.2009, 18:10
Сообщение #1


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Не могу понять, как поправить следующую ошибку:
class M {
QVector<LOGRECORD> log;

M(): log(0, LOGRECORD(<какие-то параметры>))
{}
};

И так сделал везде, где встречается QVector<LOGRECORD>. Или же сделал так:
void f(const QVector<LOGRECORD>& other)
QVector<LOGRECORD> p(other);

Структура LOGRECORD не имеет (теперь) конструктора по-умолчанию! Я вроде бы заменил все вектора указанным способом. При этом выдаются следующие ошибки:
Цитата
1>Compiling...
1>VerticalGraphics.cpp
1>tlv.cpp
1>c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(410) : error C2512: 'LOGRECORD' : no appropriate default constructor available
1> c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(396) : while compiling class template member function 'void QVector<T>::realloc(int,int)'
1> with
1> [
1> T=LOGRECORD
1> ]
1> c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(371) : while compiling class template member function 'QVector<T>::QVector(int,const T &)'
1> with
1> [
1> T=LOGRECORD
1> ]
1> d:\projects\src\transaslogviewer\ParamDescr.h(39) : see reference to class template instantiation 'QVector<T>' being compiled
1> with
1> [
1> T=LOGRECORD
1> ]
1>c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(451) : error C2512: 'LOGRECORD' : no appropriate default constructor available
1>Reader.cpp
1>c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(410) : error C2512: 'LOGRECORD' : no appropriate default constructor available
1> c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(396) : while compiling class template member function 'void QVector<T>::realloc(int,int)'
1> with
1> [
1> T=LOGRECORD
1> ]
1> c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(371) : while compiling class template member function 'QVector<T>::QVector(int,const T &)'
1> with
1> [
1> T=LOGRECORD
1> ]
1> d:\projects\src\transaslogviewer\ParamDescr.h(39) : see reference to class template instantiation 'QVector<T>' being compiled
1> with
1> [
1> T=LOGRECORD
1> ]
1>c:\qt\4.3.2\include\qtcore\../../src/corelib/tools/qvector.h(451) : error C2512: 'LOGRECORD' : no appropriate default constructor available
1>Generating Code...
1>Build log was saved at "file://d:\Projects\Win32\Obj\Debug\TransasLogViewer\BuildLog.htm"
1>TLV - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Видно, что они ведут в файл qvector.h! Как их поправить? Сталкивались с такой проблемой?

Сообщение отредактировал AD - 7.7.2009, 18:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 4)
AD
  опции профиля:
сообщение 8.7.2009, 9:05
Сообщение #2


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Подскажите, пожалуйста, как правильно создать вектор структур, у которой нет конструктора по-умолчанию? Никто не сталкивался с такими проблемами? :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Влад
  опции профиля:
сообщение 8.7.2009, 9:42
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

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




Репутация:   8  


Дык, эта.... 'LOGRECORD' : no appropriate default constructor available
Я не копался в потрохах QVector, но, если QVector аналогичен std::vector, то элементы вектора должны быть default constructible (это требование необязательное, но, судя по диагностике - для QVector обязательное), copy constructible и assignable (). Ты нарушаешь эти правила, - стало быть, ты ССЗБ.....
"Правильно создать вектор структур, у которых нет конструктора по умолчанию" тебе в данном случае не удастся - взгляни на реализацию соответствующих функций в qvector.h, внутренняя реализация этого вектора требует их наличия.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mozgofil
  опции профиля:
сообщение 10.7.2009, 19:42
Сообщение #4


Студент
*

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

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




Репутация:   0  


Цитата(AD @ 7.7.2009, 18:10) *
Не могу понять, как поправить следующую ошибку:
class M {
QVector<LOGRECORD> log;

M(): log(0, LOGRECORD(<какие-то параметры>))
{}
};


А так:
class M {
QVector<LOGRECORD> log;

M(): log(0)
{}
};



вообще какой смысл использовать QVector,
если задавать ему 0-размер?
Чем QList не нравиться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 10.7.2009, 23:23
Сообщение #5


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(mozgofil @ 10.7.2009, 20:42) *
Чем QList не нравиться?


Имхо человек хочет большего, чем может дать тот компьютер на котором он запускает программу. Наблюдая за темами насчет движка "Сахары" у меня именно такое мнение сложилось. И дело даже не в Qt или stl.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 14.1.2025, 20:44