0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
|
||||||
1 | ||||||
Почему конструктор не работает?13.11.2012, 21:53. Показов 2570. Ответов 30
Метки нет (Все метки)
Нужна помощь, коллеги, так как сам ничего не понял. Создал класс. Хотелось бы, чтобы при создании объекта явный конструктор класса специфицировал два параметра из string. При попытке специфицировать два параметра компилятор ошибки не выдает, но при запуске программа вылетает. Вот код, проблемное место выделил комментом:
0
|
13.11.2012, 21:53 | |
Ответы с готовыми решениями:
30
Почему не работает конструктор? Почему не работает конструктор? Почему не работает конструктор копирования? Не работает конструктор копирования почему-то... |
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
|
13.11.2012, 22:01 | 2 |
Ну странно, что компилятор ошибок не выдаёт. Твои функции setName и setName2 должны возвращать что-то типа string, а они ничего не возвращают.
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
||||||
13.11.2012, 22:11 | 4 | |||||
Тогда уж так:
0
|
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
|
|
13.11.2012, 22:16 [ТС] | 5 |
Да, они не должны возвращать, только установить значение элементов данных (elDat и elDat2).
По букварю (Дейтелы) условие такое. Авторы аргументируют тем, что в set-функции класса, устанавливающем значение элементов данных в области доступа private, можно реализовать полезные дополнения, в виде проверки корректности вводимых данных. При этом в случае необходимости надо будет модифицировать только эту set-функцию, не трогая остальные клиенты элементов данных.
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
|||||||||||
13.11.2012, 22:23 | 6 | ||||||||||
Тогда зачем объявлен тип возвращаемого значения? Напишите там void и будет вам счастье.
Добавлено через 45 секунд
А параметры всё же лучше передавать по константной ссылке:
1
|
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
|
|
13.11.2012, 22:24 [ТС] | 7 |
С этим кодом так же вылетает, вот дословно: "An unhandled win32 exception occurred in Hw.exe [2532]. Just-In-Time debugging this exception failed with the folloing error: No installed debugger has Just-In-Time debugging enabled. In Visual Studio, Just-In-Time debugging can be enabled from
Tools/Options/Debugging/Just-In-Time. Check the documentation index for 'Just-in-time debugging, errors' for the more information." При этом компилятор возвращает 0.
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
|
13.11.2012, 22:27 | 8 |
А свои функции установки удалил или оставил?
Что за компилятор, кстати?
0
|
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
|
|
13.11.2012, 22:32 [ТС] | 9 |
Да, есть на белом свете счастье Действительно, вместо void написал string, эх Спасибо большое!
До константной ссылки, надеюсь, скоро дойду Не по теме: PS: Очень нравится книга Дейтелов, очень доходчиво пишут. Пробовал много книг, но вот эта... Сразу видно, разрабатывали тщательнейшим образом.
0
|
Croessmah
|
13.11.2012, 22:34
#10
|
0
|
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
|
|
13.11.2012, 22:40 [ТС] | 11 |
Закомментил. Компилятор GCC, в ридми написано:
Не по теме: Ну что Вы, разве они такое напишут :))) Это же крутющие спецы преподавания таким медным чайникам, как я :) Кстати, понял одно, пока долго-долго выбирал книгу: бывают 3 вида книг по программированию: написанные 1. основателями (например, Страусструп, 2. коммерсантами (просто зашибить деньгу на книжке) и 3. преподавателями. Вот Дейтелы как раз и преподаватели.
0
|
Croessmah
|
13.11.2012, 22:42
#12
|
0
|
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
|
|
13.11.2012, 22:51 [ТС] | 13 |
Не по теме: Тут заступлюсь за своих преподов: как видно из примеров из книги, мы используем тормозную систему автомобиля через посредство педаля тормоза, не зная тонкостей устройства тормозной системы. То же самое и со string-ом: шуруем, не понимая деталей исполнения. Но работает же. Имхо, мне нравится такой подход, практичности много :)
0
|
Неэпический
|
|
13.11.2012, 22:53 | 14 |
Добавлено через 1 минуту Не по теме:
1
|
Nweo
|
13.11.2012, 23:03
[ТС]
#15
|
Не по теме: Пока что для меня - объект класса <string>. Ну да, поначалу :) Зато пошуровали в это время тормозной педалькой, каких-то целей достигли. Туда съездили, это загрузили-разгрузили. А там, глядишь, и время освободиться и руки дойдут до тормозной системы, да и до топливной, электрической системы, трансмисси тоже можно добраться. Лишь было бы время да здоровье, остальное будет ;)
0
|
Kuzia domovenok
|
13.11.2012, 23:08
#16
|
Не по теме: программист должен разбираться в том, что использует вплоть до битовых операций, областей в памяти и прочего низкоуровневого
0
|
Croessmah
|
13.11.2012, 23:10
#17
|
0
|
13.11.2012, 23:13 | 18 | |||||
Теперь конструтор перестает быть exception-safe. А это может повлечь за собой всякие веселые вещи, например, не будет вызываться деструтор для объекта. В C++11 можно заюзать делегирование конструкторов.
Для использования контейнера std::string не обязательно знать классы, но надо уметь работать с указателями и выделением памяти, поскольку первое - лишь способ реализации.
1
|
13.11.2012, 23:19 | 20 |
Croessmah, я уже сказал, что требуется для понимания работы контейнера std::string. Работа с выделением памяти и указателями. Классы ну никак этому не способствуют. Все равно, что сказать - для понимания работы деревьев(в частности - std::set и иже с ним) надо изучить классы.
0
|
13.11.2012, 23:19 | |
13.11.2012, 23:19 | |
Помогаю со студенческими работами здесь
20
Неправильно работает конструктор копирования list, почему? Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию) Почему не вызывается конструктор перемещения? Почему не вызывается конструктор копии? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |