Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
^Tecktonik_KiLLeR
1160 / 442 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
#1

Конструктор - копировщик: ошибка - C++

21.03.2010, 22:21. Просмотров 2715. Ответов 19
Метки нет (Все метки)

при таком коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class cat{
public:
    cat();
    ~cat();
    cat(cat&);
};
 
cat::cat(){
cout<<"Cat constructor"<<endl;
}
cat::~cat(){
cout<<"Cat Destructor"<<endl;
}
cat::cat(){
cout<<"Cat copy constructor"<<endl;
}
 
cat f1(cat thecat);
cat *f2(cat *thecat);
 
 
int main(){
    cout<<"making cat"<<endl;
cat frisky;
cout<<"call f1"<<endl;
f1(frisky);
cout<<"call f2"<<endl;
f2(&frisky);
system("pause");
return 0;
}
 
cat f1(cat thecat){
cout<<"f1 return"<<endl;
return thecat;
}
 
cat f2(cat *thecat){
cout<<"f2 return"<<endl;
return thecat;
}
выводит такое

Error 1 error C2084: function 'cat::cat(void)' already has a body d:\c++ projects\proba\proba\code.cpp 19
Error 2 error C2264: 'cat::cat' : error in function definition or declaration; function not called d:\c++ projects\proba\proba\code.cpp 29
Error 3 error C2556: 'cat f2(cat *)' : overloaded function differs only by return type from 'cat *f2(cat *)' d:\c++ projects\proba\proba\code.cpp 43
Error 4 error C2040: 'f2' : 'cat (cat *)' differs in levels of indirection from 'cat *(cat *)' d:\c++ projects\proba\proba\code.cpp 43
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2010, 22:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор - копировщик: ошибка (C++):

[C++] В чём тут ошибка? (делаю конструктор-копировщик) - C++
Пытаюсь написать класс с конструктором-копировщиком.В чём тут ошибка? class Subroutine { public: Subroutine (){}; ...

Конструктор-копировщик - C++
Доброго времени суток! Сейчас изучаю класы, и столкнулся с такой проблемой. Компилятор отказывается понимать те функции-члены, в которых...

Конструктор-копировщик - C++
Matrix::Matrix(const Matrix &amp; rhs) { itsNumOfStr = rhs.itsNumOfStr; itsNumOfCol = rhs.itsNumOfCol; //cout &lt;&lt; &quot;CONTRRRRRRRR\n&quot;; ...

Конструктор копировщик - C++
Самостоятельно изучаю С++ по Либерти(освой за 21 день) Требуется создать класс и конструктор копировщик. Компилятор Visual C++ 2010. ...

Виртуальный конструктор копировщик. - C++
Добрый вечер . Объясните для чего в природе может быть использован виртуальный конструктор копировщик ? виртуальная функция существует для...

конструктор копировщик-смысл? - C++
объясните пожалуйста для чего нужен конструктор копировщик... в С++ за 21 день страница 248

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
21.03.2010, 22:38 #2
Почитай книгу по внимательнее, и скачай ещё какую нибудь книгу по C++.
C++ 24 часа выучить не возможно, это и так понятно.

Я не знаю нормальная ли эта книга: которую ты читаешь, дай пожалуйста ссылку мне интересно,
что это за книженция.
0
^Tecktonik_KiLLeR
1160 / 442 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
21.03.2010, 23:41  [ТС] #3
C++ за 21 день страница 248
1
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
21.03.2010, 23:47 #4
За 21 тоже не возможно.
0
xxNpCxx
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 8
01.08.2011, 18:41 #5
Отвечаю почему ошибка в конструкторе-копировальщике - В определении конструктора-копировальщика вы забыли указать входной параметр , а именно - ссылку на объект.

Цитирую ваш код :

Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
cat::cat(){
cout<<"Cat copy constructor"<<endl;
}
И код с исправленной ошибкой :
C++
1
2
3
cat::cat([COLOR="red"]cat &rsk[/COLOR]){
cout<<"Cat copy constructor"<<endl;
}
Еще у вас есть одна ошибка опять же в определении но на этот раз в определении функции f2.

Ваш код :

Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
cat f2(cat *thecat){
cout<<"f2 return"<<endl;
return thecat;
}
И код с исправленной ошибкой :

C++
1
2
3
4
cat [COLOR="Red"]*[/COLOR]f2(cat *thecat){
cout<<"f2 return"<<endl;
return thecat;
}
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
01.08.2011, 18:47 #6

Не по теме:

Цитата Сообщение от xxNpCxx Посмотреть сообщение
конструкторе-копировальщик
copy constructor, а не copier, поэтому конструктор копирования!



Добавлено через 1 минуту
Кстати в конструкторе копирования аргументом должна быть ссылка на константный объект.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.08.2011, 18:51 #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
Кстати в конструкторе копирования аргументом должна быть ссылка на константный объект.
Kastaneda, невсегда) взгляни на auto_ptr
1
xxNpCxx
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 8
01.08.2011, 18:54 #8
Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:


copy constructor, а не copier, поэтому конструктор копирования!



Добавлено через 1 минуту
Кстати в конструкторе копирования аргументом должна быть ссылка на константный объект.
Ага. Это не обязательно но не помешает .. Так как есть вероятность что вы попытаетесь изменить что-то в конструкторе. И компилятору будет проще указать вам на вашу ошибку.
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
01.08.2011, 19:01 #9
Цитата Сообщение от Maxwe11 Посмотреть сообщение
Kastaneda, невсегда) взгляни на auto_ptr
Но то, что невсегда - это да, но тем не менее я всегда так делаю)

А можно пример с auto_ptr? Что-то у меня с ним конструктор копирования не вызывается.
0
LosAngeles
Заблокирован
01.08.2011, 19:34 #10
C++
1
2
3
4
auto_ptr(auto_ptr<_Ty>& _Right) _THROW0()
        : _Myptr(_Right.release())
        {   // construct by assuming pointer from _Right auto_ptr
        }
C++
1
2
3
4
5
6
_Ty *release() _THROW0()
        {   // return wrapped pointer and give up ownership
        _Ty *_Tmp = _Myptr;
        _Myptr = 0;
        return (_Tmp);
        }
в 2008 студии
1
Kastaneda
01.08.2011, 21:15
  #11

Не по теме:

Maxwe11, LosAngeles, я просто не туда думать начал, теперь понял)

0
Сыроежка
Заблокирован
01.08.2011, 23:32 #12
Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:


copy constructor, а не copier, поэтому конструктор копирования!



Добавлено через 1 минуту
Кстати в конструкторе копирования аргументом должна быть ссылка на константный объект.
Конструктор копирования может в качестве параметра иметь ссылку на объект T &, либо константную ссылку на объект const T &, либо изменяемую ссылку на объект volatile T &, либо константную изменяемую ссылку на объект const volatile T &. А также может иметьб дополнительные параметры, если все они имеют значения по умолчанию. Например,

X::X( const X &, int myData = 0 );
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.08.2011, 02:43 #13
Цитата Сообщение от Сыроежка Посмотреть сообщение
либо константную ссылку на объект const T &, либо изменяемую ссылку на объект volatile T &, либо константную изменяемую ссылку на объект const volatile T &.
пусть придирки, но всё же
ссылку на константный объект,
ссылку на volatile объект,
ссылку на константный volatile объект.
0
Сыроежка
Заблокирован
02.08.2011, 04:59 #14
Цитата Сообщение от OstapBender Посмотреть сообщение
пусть придирки, но всё же
ссылку на константный объект,
ссылку на volatile объект,
ссылку на константный volatile объект.
Честно говоря, не понял смысла ваших придирок. К чему вы придрались? К термину "константная ссылка"? Так это совершенно корректный термин.
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
02.08.2011, 08:06 #15
Ссылки по дефолту константные, из нельзя переопределить.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2011, 08:06
Привет! Вот еще темы с ответами:

Конструктор копировщик объектов, содержащих массивы - C++
Конструктор копировщик который будет создавать объекты в которых есть массивы. Можно просто фрагмент кода.

Стандартный конструктор копировщик и оператор = не справляются со своей задачей - C++
Всем привет ! Выяснил , что стандартный конструктор копировщик и оператор = не справляются со своей задачей в случае, если...

Параметр rhs, что это и для чего (конструктор-копировщик) - C++
Вот код: #include &lt;iostream&gt; class jurnal { public: jurnal() { }

Конструктор копии: при возвращении объекта ошибка памяти - C++
Реализация класса: #include&quot;Class_Taxi.h&quot; #include&lt;fstream&gt; #include&lt;conio.h&gt; using namespace std; Zakaz::Zakaz() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.08.2011, 08:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru