Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 24.04.2010, 09:45   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос Создание отдельного модуля для класса...

Имеется задача: реализовать абстрактый тип данных, в котором имеются методы для изменения полей, их чтения и т.д. Это все дело я реализовал, но возникла огромная проблема из-за моих довольно узких знаний C++Builder6. Класс был реализован в модуле Unit1, соответственно степень его абстракции стремиться к нулю. Мне необходимо весь мой код переместить в отдельный модуль, а уже этот модуль вызывать из Unit1.
Создал модуль Brick, в котором в описателе(кажется, называется Header File) пишу следующий код(не убирая автовставку C++Builder):
Код:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "Brick2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
class Brick
{
        public:
                double height; //поле класса
                double width; //поле класса
        public:
                double GetHeight();  //метод класса
                double GetWidth();  //метод класса
}
Затем в самом коде(Open Source) пишу следующее:
Код:
//---------------------------------------------------------------------------

#ifndef Brick2H
#define Brick2H
//---------------------------------------------------------------------------
double Brick::GetHeight()
{
  return height;
}

double Brick::GetWidth()
{
  return width;
}

#endif
При попытке откомпилировать этот код, компилятор выдает:"E2090 Qualifier 'Brick' is not a class or namespace"(как я понимаю, это значит:"Идентификатор 'Brick' не является классом или не описано") и "E2040 Declaration terminated incorrectly"("Некорректное завершение описателя"). Но что здесь не так? Класс 'Brick', как видно из Header File, был успешно объявлен. Описатель класса вроди бы тоже завершен нормально(фигурными скобками). Подскажите пожалуйста, что неправильно в этом коде?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.

Последний раз редактировалось Mixim; 24.04.2010 в 09:48.
Mixim вне форума Ответить с цитированием
Старый 24.04.2010, 10:05   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Надо быть уверенным, что ваш header точно где-то подключен через #include "Brick2.h". А как я вижу вы походу не там описали #include "Brick2.h", уберите эту строку из .h и припишите в .cpp/.c т.е. туда где вы пишите саму реализацию кода класса.
BOBAH13 вне форума Ответить с цитированием
Старый 24.04.2010, 10:27   #3
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Надо быть уверенным, что ваш header точно где-то подключен через #include "Brick2.h". А как я вижу вы походу не там описали #include "Brick2.h", уберите эту строку из .h и припишите в .cpp/.c т.е. туда где вы пишите саму реализацию кода класса.
Теперь вообще "глупость" Builder'а стремится к бесконечности... Как я уже отмечал, мне необходимо создаваемый модуль использовать в Unit1. После исправлений, которые Вы сказали сделать, ошибка:"Declaration syntax error" появилась при объявлении Form1. Извиняюсь, за наглость, но вот код из Unit1(Header File/Open Sourse):
код из Header File:
Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
код из Open Sourse:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Brick2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Пошел нафиг");
}
//---------------------------------------------------------------------------
Компилятор теперь "ругается" на выделенную строчку! Ну там то что может быть не так? Вроди бы мои "руки в эту строчку даже не лезли".
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 14:06
Создание модуля Deight Общие вопросы Delphi 20 31.12.2008 15:34
Отследить нажатие клавиши для отдельного окна Черничный Win Api 12 13.09.2008 19:47
Создание модуля в Си JET_FLASH Общие вопросы C/C++ 16 11.01.2008 17:12
Создание модуля голосования AlekFirst PHP 1 18.10.2007 10:54


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS