![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Доброе время суток.
У меня такая проблема: В одном .cpp файле располагается код функции WinMain() и всё что обязятельно для любой проги. В .h файле находятся объявления классов. В другом .cpp файле располагаются определения функций классов и вот его код:
Проблема в том, что при создании объекта типа CTank1 не вызывается его конструктор. Я думал, что проблема может быть в разбиении проги на разные файлы и создал функцию Constructor, которая полностью идентична конструктору, так вот она вызывается и значения инициализируются, а если не вызывать Constructor(), то при обращении к переменным XCoord, YCoord и ZCoord прога вылетает, то есть эти переменные не инициализированы. Подскажите, пожалуйста, в чём проблема? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
KaraKum, сколько у тебя конструкторов определено?
если только этот, то он обязан вызваться |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
KaraKum, мы не телепаты. Весь код в студию.
Если вообще не вызывается, возможно у тебя больше одного объекта определено (например, если определение объекта в .h). |
|||
|
||||
| Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: 2 Всего: 5 |
Покажи хедер и срр, тогда можно будет об чем то говорить
-------------------- Иногда переменная - это просто переменная |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Вот тут 100%-но вызывается, только какой конструктор для какого sTempPointers? Это сообщение отредактировал(а) baldina - 21.3.2008, 10:39 |
|||
|
||||
| KaraKum |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
У меня такая система файлов в проге: есть файл "Includes.h" в котором находятся все файлы, которые нужно подключить к программе (этот файл подключён к "WinMain.cpp"); для функций и классов по два файла: "Functions.h/.cpp" и "Classes.h/.cpp" - все .h файлы подключены к файлу "Includes.h".
Вот файл "Classes.h":
И вот "Classes.cpp":
Функция CTank1.Constructor() вызывается и происходит успешная инициализация переменных XCoord... Но если не вызывать эту функцию, то прога при рисовании этого объекта (так как функция DrawYourself() обращается к этим переменным) вылетает.
Это структура, которая хранит указатель на первый объект списка объектов типа CTank1. И она удачно получает указатель на объект, так как в функции cController.NextStep() вызывается функция DrawYourself() именно с помощью этого указателя. В чём проблема? |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Скорее всего, здесь проблема: в этой точке (в конструкторе) указатель еще не определен, а ты его уже используешь (присваиваешь). Делаю этот вывод из кода вызова: Низя так: в sTempPointers.ptrTank1 еще мусор. Но можно написать в конструкторе sSpaceObjects.ptrTank1 = this. -------------------- ... |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
че то я не понял, ты присваеваешь указатель в конструкторе, который должен быть проинициализирован после вызова оного?
объясни как строчки выше могут согласоваться??? |
||||
|
|||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Именно! Просто переместил операцию sSpaceObjects.ptrTank1 = sTempPointers.ptrTank1; в функцию CController::FirstInitializations(); и всё заработало! Спасибо за помощь. Это сообщение отредактировал(а) KaraKum - 21.3.2008, 14:55 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |