Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 08:17   #1
firefox0013
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 17
По умолчанию Класс не видит обЪект Borland C++ Builder

Пишу курсовую. Суть создать класс и его наследников рисующих фигуру. Создаю класс Point его наследника Krug и в нем функцию рисования в канве. Вылазит ошибка :
[BCC32 Error] Unit1.cpp(40): E2451 Undefined symbol 'PaintBox1'
[BCC32 Error] Unit1.cpp(40): E2108 Improper use of typedef 'point'
На сколько я понимаю класс PaintBox просто не видит хотя он есь, а что с point не понимаю. Как это можно исправить? причем рисование должно быть именно в классе

Код:
 
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
 
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
 class point
{
  protected:
  int x,y;
 
  point(int xk,int yk)
  {
  x=xk;
  y=yk;
  }
};
 
class krug : public point
 {
 private:
 int rad;
 public:
 
 krug(int xr,int yr,int radk):
 point(xr,yr)
  {
   rad=radk;
  }
 
 void krug::show()
  {
   PaintBox1->Canvas->Ellipse((point.x-rad),(point.y-rad),(point.x+rad),(point.y+rad)); //Вот тут ошибка
  }
 
 };
 
 
 
int xk,yk,radk;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 xk=StrToInt(Edit1->Text);
 yk=StrToInt(Edit2->Text);
 radk=StrToInt(Edit3->Text);
 // А сдесь по идеи должна вызыватся функция show 
 //PaintBox1->Canvas->Ellipse((xk-radk),(yk-radk),(xk+radk),(yk+radk));
 
}
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::PaintBox1Click(TObject *Sender)
{
PaintBox1->Canvas->Rectangle(1,1,1000,1000);
}
//---------------------------------------------------------------------------
firefox0013 вне форума Ответить с цитированием
Старый 30.09.2009, 08:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Undefined symbol 'PaintBox1'
Правильно не видит. Нет такого ПаинтБокса в классе
Если имеется ввиду паинтбокс на форме то:
Код:
void krug::show()
  {
   Form1->PaintBox1->Canvas->Ellipse((point.x-rad),(point.y-rad),(point.x+rad),(point.y+rad)); //Вот тут ошибка
  }
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2009, 10:24   #3
firefox0013
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 17
По умолчанию

Спасибо рисование заработало, но теперь косяк с конструктором похоже. вылазит окошко:

First chance exception at $7C812AFB. Exception class EAccessViolation with message 'Access Violation'. Process Project1.exe (4084)

но если переместить krug A; в кнопку 1 то такой ошибки нет но в кнопке 2 A.Show() не видит A

Код:

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

 class point
{
  protected:
  int x,y;

  point()
  {
  x=StrToInt(Form1->Edit1->Text);
  y=StrToInt(Form1->Edit2->Text);
  }

  void move(int xm,int ym)
  {
  x+=xm;
  y+=ym;
  }

};

class krug : public point
 {
 private:
 int rad;
 public:

 krug():
 point()
  {
   rad=StrToInt(Form1->Edit3->Text);;
  }

 void show()
  {
   Form1->PaintBox1->Canvas->Ellipse((point::x-rad),(point::y-rad),(point::x+rad),(point::y+rad));
  }

 };




int xt=10,yt=10;
krug A;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 //krug A;
 A.show();
}
//---------------------------------------------------------------------------




void __fastcall TForm1::PaintBox1Click(TObject *Sender)
{
PaintBox1->Canvas->Rectangle(1,1,1000,1000);
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button2Click(TObject *Sender)
{
A.move(xt,yt);  //тут ошибка если krug A; находится в кнопке
}
//---------------------------------------------------------------------------

Последний раз редактировалось firefox0013; 30.09.2009 в 10:26.
firefox0013 вне форума Ответить с цитированием
Старый 30.09.2009, 11:52   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых:
Код:
 public:
 void move(int xm,int ym)
  {
  x+=xm;
  y+=ym;
  }
Ато он у тя невидим. (я вообще удивляюсь как это скомпилилось)

Во-вторых:
Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
krug A;
A.move(xt,yt);
A.show();

}
Все работает как надо.

В-третьих: Если ты локализуешь krug A в одной функции, то и работать он будет только в ней - про видимость переменных почитай.
Так что как правило такие вещи делают глобальными
I'm learning to live...

Последний раз редактировалось Stilet; 30.09.2009 в 11:56.
Stilet вне форума Ответить с цитированием
Старый 30.09.2009, 13:17   #5
firefox0013
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 17
По умолчанию

Так вот я ее хочу сделать глобальной обявляю сразу после класса
а она выдает Access Violation

Код:
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
 
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
 class point
{
  protected:
  int x,y;
 
  point()
  {
  x=StrToInt(Form1->Edit1->Text);
  y=StrToInt(Form1->Edit2->Text);
  }
 
  void move(int xm,int ym)
  {
  x+=xm;
  y+=ym;
  }
 
};
 
class krug : public point
 {
 private:
 int rad;
 public:
 
 krug():
 point()
  {
   rad=StrToInt(Form1->Edit3->Text);;
  }
 
 void show()
  {
   Form1->PaintBox1->Canvas->Ellipse((point::x-rad),(point::y-rad),(point::x+rad),(point::y+rad));
  }
 
 };
 
 
 
 
int xt=10,yt=10;
krug A; //Вот тут
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------

Последний раз редактировалось firefox0013; 30.09.2009 в 13:19.
firefox0013 вне форума Ответить с цитированием
Старый 30.09.2009, 13:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А че у меня все работает?

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

 class point
{
  protected:
  int x,y;

  point()
  {
  x=10;
  y=10;
  }

  public:void move(int xm,int ym)
  {
  x+=xm;
  y+=ym;
  }

};

class krug : public point
 {
 private:
 int rad;
 public:

 krug():
 point()
  {
   rad=10;
  }

 void show()
  {
   Form1->PaintBox1->Canvas->Ellipse((point::x-rad),(point::y-rad),(point::x+rad),(point::y+rad));
  }

 };




int xt=10,yt=10;
krug A;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 A.show();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
A.move(xt,yt);
A.show();
}
//---------------------------------------------------------------------------
Я только Эдиты поубирал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2009, 13:28   #7
firefox0013
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 17
По умолчанию

так он на них и орет понять не могу почему
firefox0013 вне форума Ответить с цитированием
Старый 30.09.2009, 13:56   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на них и орет
Ах вон чего. Сразу бы и сказал.
Вообще так с классами не поступают. По хорошему их нужно создавать:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

 class point
{
  protected:
  int x,y;

  point()
  {
  x=StrToInt(Form1->Edit1->Text);
  y=StrToInt(Form1->Edit2->Text);
  }

  public:void move(int xm,int ym)
  {
  x+=xm;
  y+=ym;
  }

};

class krug : public point
 {
 private:
 int rad;
 public:

 krug():
 point()
  {
   rad=10;
  }

 void show()
  {
   Form1->PaintBox1->Canvas->Ellipse((point::x-rad),(point::y-rad),(point::x+rad),(point::y+rad));
  }

 };




int xt=10,yt=10;
krug *A;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 A->show();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
A->move(xt,yt);
A->show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
A=new krug;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 delete A;
}
//---------------------------------------------------------------------------
И удалять.
Заруби это себе в наносу пригодится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2009, 14:18   #9
firefox0013
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 17
По умолчанию

БОЛЬШОЕ спасибо. Заработало!!!!!
firefox0013 вне форума Ответить с цитированием
Старый 01.10.2009, 14:07   #10
firefox0013
Пользователь
 
Регистрация: 30.09.2009
Сообщений: 17
По умолчанию

еще маленький вопросик
x,y переменные указатели int родителя point
rad указатель int наследника

Ellipse((*(point::x)-*rad),(*(point::y)-*rad),(*(point::x)+*rad),(*(point:: y)+*rad));

выдает ошибку неправильного обращения к поинт всяко разно уже пробовал не получается
firefox0013 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Borland Pascal. Помощь 9 класс) Lerik09 Помощь студентам 21 15.09.2009 21:44
Помогите с курсовой borland с++ builder 6.0 Go6a Помощь студентам 5 14.11.2008 18:20
Borland C++Builder 2007 Sota Софт 1 14.03.2008 20:21
помогите с Borland C++ Builder 6.0 Enterprise Noor Софт 4 15.10.2007 14:13