Подскажите
Или как вообще в Borland C описать свой класс который состоит из стека и методов обработки этого стека?
[COLOR=red]Плохо писать много знаков препинания. Больше так не тупи.
Сказал тебе это - [/COLOR]lord Kelvin
У меня есть реализованный(работающий в Visual c++) консольный класс мне нужно его вставить в приложение
Или как вообще в Borland C описать свой класс который состоит из стека и методов обработки этого стека??????????????????
:???: :???: :???:
1. В опциях проекта в закладке компилер или адванцед компилер (точно не помню) есть галка совместимость с MFC.
попробуй поставить ее и сделать в проекте адд юнит со своим классом.
2. Свой класс описывается так-же как и в любом С++
class myClass : public myBaseClass
{
private:
.........
protected:
.........
public:
.........
};
1. В опциях проекта в закладке компилер или адванцед компилер (точно не помню) есть галка совместимость с MFC.
попробуй поставить ее и сделать в проекте адд юнит со своим классом.
2. Свой класс описывается так-же как и в любом С++
class myClass : public myBaseClass
{
private:
.........
protected:
.........
public:
.........
};
Не-а попрежнему ругается.
Причем он ругается при первом же обращению к свойству метода, а это свойство инициализируется в конструкторе.:???:
Не-а попрежнему ругается.
Причем он ругается при первом же обращению к свойству метода, а это свойство инициализируется в конструкторе.:???:
Тогда текст класса в студию.
ЗЫ: Извени забыл еще вот про что:
Type Library (Tools|Environment Options)
Use the Type Library page of the Environment Options dialog box to select options for the Type Library editor. The new settings take effect when you click OK.
Code generation
Use dispinterfaces in control wrappers If the component supports both vtable and IDispatch-based interfaces, checking this option causes the importer to make the dispinterface the default interface for the component. The default behavior is to make the vtable-based interface the default interface.
MS-style property getter/setter prefixes If this option is checked, the importer uses Microsoft Visual C++ style prefixes on property getter/setter methods. Otherwise, the default prefixes get_ and set_ are used.
Component wrapper file
Change suffix The type library importer appends the suffix _OCX to the component wrapper files it generates. You can change this behavior by clicking the Change suffix checkbox, and selecting a different suffix or by typing a new one into the text field.
Ignore special CoClass Flags when importing
When you import an ActiveX Control, the type library importer only imports CoClasses that are not marked as Hidden, Restricted, or Predefined, and marked as CanCreate (actually 'noncreatable’). These flags are supposed to be set if the object is intended for general use. However, if you want to create a control for an internal application only, you can override the flags to generate the CoClass wrappers. In this case, you would check Ignore special CoClass flags when importing, Hidden, Restricted, and uncheck CanCreate (noncreatable).
Check the coclass flags you want to ignore when importing ActiveX controls:
Predefined Client applications should automatically create a single instance of this object.
Restricted A coclass marked 'restricted' is supposed to be ignored by tools that access COM objects. It's exposed by the type library but restricted to those authorized to use it.
Hidden The interface exists but should not be displayed in a user-oriented browser.
Can Create The instance can be created with CoCreateInstance.
Тогда текст класса в студию.
struct RAST{
RAST *left,*right;
int ver1,ver2;
double rast,ang;
};
struct DOT{
DOT *left,*right;
int ver,ind;
double x,y;
};
class TREE{
RAST *vetv;
DOT *dot;
public:
TREE(void);
~TREE(void);
void add_vetv(int ver1,int ver2);
int in_dot(double x,double y);//legit ili net v dereve
void add_dot(int ver,double x,double y);
void del_ver(int i);
void del_vetv(int ver1,int ver2);
DOT *find(int i);
int num();
};
TREE::TREE(void){
dot=new DOT;
dot->left=dot->right=NULL;
dot->ver=0;
vetv=new RAST;
vetv->left=vetv->right=NULL;
vetv->rast=0;
}//end TREE
TREE::~TREE(void){
while (dot->right!=NULL)
{dot=dot->right;
free(dot->left);}
free(dot);
while (vetv->right!=NULL)
{vetv=vetv->right;
free(vetv->left);}
free(vetv);
}// end ~TREE
void TREE::add_dot(int ver,double x,double y){
{вот здесь останавливается } if(dot->ver==0)
{
dot->ver=ver;
dot->x=x;
dot->y=y;
dot->ind=100;
}
else{
if(!in_dot(x,y))
{
DOT *p;
p=(DOT*)malloc(sizeof(DOT));
p->ver=ver;
p->x=x;
p->y=y;
p->ind=100;
p->left=NULL;
p->right=dot;
dot->left=p;
dot=dot->left;
}
}
}// Dobavliaet vershinu v dot i sootvetstvujushie rastaiania v vetv
void TREE::add_vetv(int ver1,int ver2){
DOT *p1,*p2;
if(vetv->rast==0){
vetv->ver1=ver1;
vetv->ver2=ver2;
p1=find(ver1);
p2=find(ver2);
vetv->rast=hypot(p2->x-p1->x,p2->y-p1->y);
vetv->ang=atan2(p2->y-p1->y,p2->x-p1->x)*180/Pi;
if(vetv->ang<0)vetv->ang+=360;
}
else{
RAST *pp;
pp=(RAST*)malloc(sizeof(RAST));
pp->ver1=ver1;
pp->ver2=ver2;
p1=find(ver1);
p2=find(ver2);
pp->rast=hypot(p2->x-p1->x,p2->y-p1->y);
pp->ang=atan2(p2->y-p1->y,p2->x-p1->x)*180/Pi;
if(pp->ang<0)pp->ang+=360;
pp->left=NULL;
pp->right=vetv;
vetv->left=pp;
vetv=vetv->left;
}
}// Dobavliaet vershinu v dot i sootvetstvujushie rastaiania v vetv
int TREE::in_dot(double x,double y){
DOT *p;
p=dot;
while(p!=NULL){
if((p->x==x)&&(p->y==y))return 1;
p=p->right;
}
return 0;
}//legit ili net v dereve
int TREE::num(){
return dot->ver;
}
И когда я запускаю оно компилится нормально ано при
Form1->MyTREE->add_dot(1,12,23);
выкидывает что доступ к адресу запрещен
И когда я запускаю оно компилится нормально ано при
Form1->MyTREE->add_dot(1,12,23);
выкидывает что доступ к адресу запрещен
RAST *left,*right;
int ver1,ver2;
double rast,ang;
};
struct DOT{
DOT *left,*right;
int ver,ind;
double x,y;
};
class TREE{
public:
RAST *vetv;
DOT *dot;
public:
[COLOR=red]__fastcall TREE(void);[/COLOR]
~TREE(void);
[COLOR=red]
published:[/COLOR] //но можно оставить и public
void add_vetv(int ver1,int ver2);
int in_dot(double x,double y);//legit ili net v dereve
void add_dot(int ver,double x,double y);
void del_ver(int i);
void del_vetv(int ver1,int ver2);
DOT *find(int i);
int num();
};
[COLOR=red]__fastcall TREE::TREE(void){[/COLOR]
dot=new DOT;
dot->left=dot->right=NULL;
dot->ver=0;
vetv=new RAST;
vetv->left=vetv->right=NULL;
vetv->rast=0;
}//end TREE
TREE::~TREE(void){
while (dot->right!=NULL)
{dot=dot->right;
free(dot->left);} [COLOR=red]//вместо free лучше [/COLOR]использовать delete
free(dot);
while (vetv->right!=NULL)
{vetv=vetv->right;
free(vetv->left);}
free(vetv);
}// end ~TREE
void TREE::add_dot(int ver,double x,double y){
[COLOR=red]if(dot == NULL) return;[/COLOR]
{вот здесь останавливается } if(dot->ver==0)
{
dot->ver=ver;
dot->x=x;
dot->y=y;
dot->ind=100;
}
else{
if(!in_dot(x,y))
{
DOT *p;
p=(DOT*)malloc(sizeof(DOT));[COLOR=red]//вместо malloc лучше new[/COLOR]
p->ver=ver;
p->x=x;
p->y=y;
p->ind=100;
p->left=NULL;
p->right=dot;
dot->left=p;
dot=dot->left;
}
}
}// Dobavliaet vershinu v dot i sootvetstvujushie rastaiania v vetv
void TREE::add_vetv(int ver1,int ver2){
DOT *p1,*p2;
if(vetv->rast==0){
vetv->ver1=ver1;
vetv->ver2=ver2;
p1=find(ver1);
p2=find(ver2);
vetv->rast=hypot(p2->x-p1->x,p2->y-p1->y);
vetv->ang=atan2(p2->y-p1->y,p2->x-p1->x)*180/Pi;
if(vetv->ang<0)vetv->ang+=360;
}
else{
RAST *pp;
pp=(RAST*)malloc(sizeof(RAST));
pp->ver1=ver1;
pp->ver2=ver2;
p1=find(ver1);
p2=find(ver2);
pp->rast=hypot(p2->x-p1->x,p2->y-p1->y);
pp->ang=atan2(p2->y-p1->y,p2->x-p1->x)*180/Pi;
if(pp->ang<0)pp->ang+=360;
pp->left=NULL;
pp->right=vetv;
vetv->left=pp;
vetv=vetv->left;
}
}// Dobavliaet vershinu v dot i sootvetstvujushie rastaiania v vetv
int TREE::in_dot(double x,double y){
DOT *p;
p=dot;
while(p!=NULL){
if((p->x==x)&&(p->y==y))return 1;
p=p->right;
}
return 0;
}//legit ili net v dereve
int TREE::num(){
return dot->ver;
}
Попробуй с моими исправлениями. и в билдере лучше использовать для методов __fastcall, хотя и не обязательно.
class AAA{
int P;
public:
__fastcall AAA(void){P=13;};
~AAA(void){};
int pp(void){return P;};
};
подцепляем в форму компилится запускается но при обращении к рр() выдает ошибку, но если исправить рр вот так
int pp(void){int P=15;return P;};
то всё нормально обращается и отрабатывает рр
Помоему он не запускает при создании класса конструктор. Потому что создаем вот такой класс:
class AAA{
int P;
public:
__fastcall [COLOR=red]inline[/COLOR] AAA(void){P=13;};
~AAA(void){};
int pp(void){return P;};
};
подцепляем в форму компилится запускается но при обращении к рр() выдает ошибку, но если исправить рр вот так
int pp(void){int P=15;return P;};
то всё нормально обращается и отрабатывает рр
?????????????????????????????????????
Это проверить легко. Поставь точку останова в контструкторе. Только не делай его inline.
PS: Слушай а как ты объект MyTREE создаешь? Я имею вв виду строку Form1->MyTREE->ad ... до этого обязательно должны быть выполнены 2 условия.
1. MyTree должно быть объявлена как public свойство класса TForm1, TREE* MyTREE.
2. В обработчике событий ONCreate формы должен быть оператор MyTREE = new TREE;
2. В обработчике событий ONCreate формы должен быть оператор MyTREE = new TREE;
[/COLOR]
Спасибо ну в досе там если ты пишеь TREE *MyTREE;
то автоматом конструктор вызывается а тут:!!!:
Спасибо вообщем!