@#pragma
Временно недоступен
955 / 226 / 6
Регистрация: 12.04.2009
Сообщений: 921
|
|
|
16.12.2009, 03:58. Просмотров 996. Ответов 9
Пытаюсь написать класс с конструктором-копировщиком.В чём тут ошибка?
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| class Subroutine {
public:
Subroutine (){};
Subroutine (const Subroutine& copy) : _name (copy._name),
params (new vector <expr_Node_t *> (copy.params->size()))
{
std::copy (copy.params->begin(),
copy.params->end() + copy.params->size(), params);
}
~Subroutine () { delete params;};
string name() const {return _name;};
void setName (const string *const s) {_name = *s;};
void pushParam (expr_Node_t *expr) {
params->push_back(expr);
}
private:
string _name;
vector <expr_Node_t *> *params;
}; |
|
Получаю ошибки:
Ошибки
Код
/usr/include/c++/4.3/bits/stl_algobase.h|396|instantiated from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false, _II = expr_Node_t**, _OI = std::vector<expr_Node_t*, std::allocator<expr_Node_t*> >*]’|
/usr/include/c++/4.3/bits/stl_algobase.h|435|instantiated from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false, _II = __gnu_cxx::__normal_iterator<expr_Node_t**, std::vector<expr_Node_t*, std::allocator<expr_Node_t*> > >, _OI = std::vector<expr_Node_t*, std::allocator<expr_Node_t*> >*]’|
/usr/include/c++/4.3/bits/stl_algobase.h|466|instantiated from ‘_OI std::copy(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator<expr_Node_t**, std::vector<expr_Node_t*, std::allocator<expr_Node_t*> > >, _OI = std::vector<expr_Node_t*, std::allocator<expr_Node_t*> >*]’|
/home/user/Interpreter/function.h|50|instantiated from here|
/usr/include/c++/4.3/bits/stl_algobase.h|342|error: no match for ‘operator=’ in ‘* __result = * __first’|
||=== Build finished: 1 errors, 0 warnings ===|
и среда указывает сюда
кусок из stl_algobase.h
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| template<>
struct __copy_move<false, false, random_access_iterator_tag>
{
template<typename _II, typename _OI>
static _OI
__copy_m(_II __first, _II __last, _OI __result)
{
typedef typename iterator_traits<_II>::difference_type _Distance;
for(_Distance __n = __last - __first; __n > 0; --__n)
{
*__result = *__first; // Вот на эту строку.
++__first;
++__result;
}
return __result;
}
}; |
|
Мне нужно перегрузить оператор '=' для класса? Я же копирую контейнер,размер элементов известен в памяти,вроде бы какая разница для STL,что там копируется.. Объясните,отчего ошибка?
0
|