Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

vector

492
12 августа 2005 года
alibabaich
238 / / 08.07.2004
Есть класс пользователей.
В другом классе есть массив пользователей.

vector <CUser> m_vuUsers;
CUser user(str);
m_vuUsers.push_back(user);
int index;
m_vuUsers.erase(m_vuUsers.begin() + index);


выдает следующее:

c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(810) : error C2558: class 'CUser' : no copy constructor available or copy constructor is declared 'explicit'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(809) : while compiling class-template member function 'void std::vector<_Ty>::_Insert_n(std::vector<_Ty>::iterator,std::vector<_Ty>::size_type,const _Ty &)'
with
[
_Ty=CUser
]
e:\Vasa\Projects\Autentification server\Users.h(21) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
with
[
_Ty=CUser
]
При определении копирующего конструктора. Выдет ругательство на operator=. Что делать? Переопределять все подряд не хочется.
Спасиба.
299
12 августа 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by alibabaich
Есть класс пользователей.
В другом классе есть массив пользователей.

vector <CUser> m_vuUsers;
CUser user(str);
m_vuUsers.push_back(user);
int index;
m_vuUsers.erase(m_vuUsers.begin() + index);


выдает следующее:

c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(810) : error C2558: class 'CUser' : no copy constructor available or copy constructor is declared 'explicit'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(809) : while compiling class-template member function 'void std::vector<_Ty>::_Insert_n(std::vector<_Ty>::iterator,std::vector<_Ty>::size_type,const _Ty &)'
with
[
_Ty=CUser
]
e:\Vasa\Projects\Autentification server\Users.h(21) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
with
[
_Ty=CUser
]
При определении копирующего конструктора. Выдет ругательство на operator=. Что делать? Переопределять все подряд не хочется.
Спасиба.


Не кажется что в векторах лучше хранить указатели на объекты а не сами объекты.
На мой взгляд в векторах рациональнее всего хранить только POD типы а все остальное указатели.

492
12 августа 2005 года
alibabaich
238 / / 08.07.2004
Цитата:
Originally posted by 3D Bob
Не кажется что в векторах лучше хранить указатели на объекты а не сами объекты.
На мой взгляд в векторах рациональнее всего хранить только POD типы а все остальное указатели.


Удивительно, но прокатило. Надеюсь только утечек памяти не будет...

299
12 августа 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by alibabaich
Удивительно, но прокатило. Надеюсь только утечек памяти не будет...


Не будет если будешь вовремя все удалять.;)

3
12 августа 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by 3D Bob
Не кажется что в векторах лучше хранить указатели на объекты а не сами объекты.


Это миражжжжж....

Цитата:
Originally posted by 3D Bob

На мой взгляд в векторах рациональнее всего хранить только POD типы а все остальное указатели.


Ерунда.

Цитата:
Originally posted by 3D Bob

Не будет если будешь вовремя все удалять.


Ну это и есть одна из задач контейнера.

Цитата:
Originally posted by alibabaich
Удивительно, но прокатило.


Ничего удивительного. Указатель имеет конструктор копирования и оператор присваивания.

Цитата:
Originally posted by alibabaich
При определении копирующего конструктора. Выдет ругательство на operator=. Что делать? Переопределять все подряд не хочется.


Ну так все и не надо, а только дефолтный и копирующий конструкторы и оператор присваивания.

Правило хорошего тона:
Определяй для класса СРАЗУ:
Дефолтный конструктор, конструктор копирования, оператор присваивания и виртуальный деструктор.

492
12 августа 2005 года
alibabaich
238 / / 08.07.2004
Цитата:
Originally posted by Green
Это миражжжжж....


Ерунда.


Ну это и есть одна из задач контейнера.


Ничего удивительного. Указатель имеет конструктор копирования и оператор присваивания.


Ну так все и не надо, а только дефолтный и копирующий конструкторы и оператор присваивания.

Правило хорошего тона:
Определяй для класса СРАЗУ:
Дефолтный конструктор, конструктор копирования, оператор присваивания и виртуальный деструктор.

Я удивлялся не тому что работает, а тому что работает у меня.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог