| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Пользовательские классы |
| Автор: GLOOM 28.1.2006, 00:51 |
| Вопрос такой как,куда добавлять собственные классы в форме чтоб потом ими пользоваться в bcb 6 |
| Автор: Artemon 28.1.2006, 19:57 |
| Во-первых: добавлять каждый класс нужно в отдельном файле (а лучше в двух) Во-вторых: Включать созданные файлы директивой #include "Имя файла" Втретьих : Создавать объект нужного тебе класаа. А потом пользуйся сколько хочешь. |
| Автор: GLOOM 29.1.2006, 14:06 |
| Сделал файл ".h" с классом class Planet { public: int a; }; добавил его в Unit.cpp создал экземпляр Planet* P в обработчике кнопки написал P->a = 1; а мне выдают project raised exception class EAccessViolation with message "Access Violation at address 00401cc8 in modul "....exe" . Write of address 00000000. |
| Автор: BreakPointMAN 29.1.2006, 14:25 |
| GLOOM, а как ты "создал экземпляр Planet* P" и где ты это сделал? |
| Автор: DeadSoul 29.1.2006, 14:37 |
| GLOOM, ты создал не класс, а указатель на класс |
| Автор: GLOOM 29.1.2006, 15:11 | ||
| Первое не понял что значит "ты создал не класс" если он у меня объявлен в ".h" и объясните как тогда создавать классы. Второе у меня проект в нём форма в исходнике формы и создавал экземпляр простым объявлением а при нажатии кнопки на форме, менялось значение "а" у экземпляра класса. третье не понял реплики
|
| Автор: Artemon 29.1.2006, 15:15 | ||
GLOOM, ты все верно сделал, только в конструкторе формы добавь строку
|
| Автор: mr.Anderson 29.1.2006, 15:17 | ||
Как тут объяснишь?
А потом уже работайте с объектом. Если не понятна разница - объясняю: надо убрать звездочку перед именем объекта. Надеюсь, понятно объяснил. |
| Автор: Artemon 29.1.2006, 15:18 |
| Если интересно про указатели - то прочитай любую книгу по C |
| Автор: mr.Anderson 29.1.2006, 15:18 | ||||
| Artemon, да зачем так париться! Видно же, что человек не разбирается пока в том, что такое указатели и с чем их едят, как и я, впрочем. Так что зачем вообще маяться с указателями? Убрал звездочку и все станет ОК! Добавлено @ 15:19 Artemon, прочитать мало иногда бывает. Добавлено @ 15:22 GLOOM, чтобы было уж совсем понятно, давайте свой пример приведу. В файле, предположим, myclass.h, пишем следующее:
Усе! Теперь в основном файле программы пишем:
И все будет полный чпок! Понятно теперь? Я постарался максимально просто и понятно сделать. Добавлено @ 15:24 GLOOM, и не забудьте плиз отписаться, поняли аль нет. Если еще вопросы, давайте их сюда. |
| Автор: GLOOM 29.1.2006, 17:08 | ||||
| первое я отлично понимаю разницу между объектом и указателем на него , даже более того я отлично понимаю разницу между ссылкой на объект и самим объектом. Второе
Нааада же , а я то уже подумал что я создаю
Кстати кто-нибудь объяснит мне что такое указатель на класс? sim7 хорошо оказывается разбираешся в указателях сможешь сам найти ошибку в своём коде без помощи debuger'a artemon А почему нельзя просто написать Planet* P; а нужно так Planet* P = new Planet; |
| Автор: mr.Anderson 29.1.2006, 17:24 | ||
Пропустили эти слова, да? А я ж написал их, и они ясно говорят, что я тоже в указателях не разбираюсь. Ладно. Хотел помочь, а получилось наоборот. Отлично... |
| Автор: GLOOM 29.1.2006, 17:47 |
| Ладно не парься sim7 меня чёто занесло Если бы я совершенно не разбирался в указателях меня вот это поставило в тупик: указатель на класс кстати MyClass MyObject1; MyObject1->MyFunc(); "звездочку" и всётаки почему нельзя просто написать Planet* P; а нужно так Planet* P = new Planet; и не надо разъяснять что оператор new выделяет бла-бла-бла а почему bcb ругается |
| Автор: BreakPointMAN 29.1.2006, 17:54 | ||||
Боюсь, что не понимаешь... судя по вопросам в данном топике... а BCB ругается потому, что не знает, к какому объекту обращаться... этого объекта просто нет, если ты пишешь:
поскольку в P лежит мусор |
| Автор: GLOOM 29.1.2006, 18:00 | ||
| File1.h: class Pl { public: int a ; }; консольное приложение не форма Unit1.cpp: #include <iostream.h> #include "File1.h" int main(int argc, char* argv[]) { Pl* Po; Po->a = 0; cout << Po->a; cin >> Po->a; return 0; } на экран выведет 0.
Тогда почему bcb не заикнулся даже что у меня в указателе мусор |
| Автор: BreakPointMAN 29.1.2006, 18:08 |
| Счастливая случайность. Советую почитать книгу по C++... Разделы про указатели и про динамическое создание объектов. |
| Автор: GLOOM 29.1.2006, 18:18 | ||
Да и что мне там раскажут что иногда бывают "Счастливые случайности". |
| Автор: BreakPointMAN 29.1.2006, 18:27 |
| GLOOM, тебе указали на ошибку, объяснили, почему так делать нельзя, посоветовали почитать конкретные разделы, чтобы восполнить пробел в знаниях... а ты все равно продолжаешь упираться... О'кей! Хочешь узнать, почему у тебя программа заработала и не заглючила, хотя могла? Берешь в руки дизассемблер и отладчик, и роешь код. Возможно, на тебя снизойдет озарение и ты это поймешь. Но не проще ли это отложить до тех времен, когда тебе это действительно понадобится, а сейчас все делать красиво и по правилам? |