Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение функции как ПОТОМ 
V
    Опции темы
Vetos
Дата 16.12.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Я хотел бы узнать как сделать чтоб функция была описана дальше по коду а её можно было вызвать раньше чем она описана, извините за такое выражение мыслей.Вот типа того:
Код

void Step1(void)
{
...
Step2;
...
};
void Step2(void)
{
...
Step3;
...
};
void Step3(void)
{
...
}

Просто выдает ошибку что  [C++ Error] Main.cpp(67): E2303 Type name expected.
Может есть какоето зарезервированное слово?
Помогите Plz


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
archimed7592
Дата 16.12.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Код

void Step1(void);
void Step2(void);
void Step3(void);

void Step1(void)
{
...
Step2();
...
};
void Step2(void)
{
...
Step3();
...
};
void Step3(void)
{
...
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Vetos
Дата 16.12.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



А если это касается классов?


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
baldina
Дата 16.12.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

class A;
class B;
class C;

class D {
  A* a; B* b; C* c;
};

class A {};
class B {};
class C {};


С классами чуть сложнее, опережающее объявление класса class X; покатит только когда не обязательно знать размер класса.

Это сообщение отредактировал(а) baldina - 16.12.2007, 23:53
PM MAIL   Вверх
Vetos
Дата 16.12.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



А если этот класс еще и является наследником другого класса?


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
archimed7592
Дата 17.12.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Vetos @  16.12.2007,  23:58 Найти цитируемый пост)
А если этот класс еще и является наследником другого класса? 

Точно так же.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Vetos
Дата 17.12.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Пишет что не может компилятор не создал конструктор по умолчанию ну вот короче:
[C++ Error] Main.cpp(79): E2125 Compiler could not generate default constructor for class 'Cos'
Че делать


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
archimed7592
Дата 17.12.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Vetos @  17.12.2007,  00:04 Найти цитируемый пост)
Че делать 

Снимать штаны и бегать.

Добавлено через 9 секунд
Код покажи.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 17.12.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(Vetos @  17.12.2007,  00:04 Найти цитируемый пост)
Че делать 

код показать.

Добавлено через 32 секунды



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
baldina
Дата 17.12.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



В таком объявлении переменной A* a (равно как и в опережающем объявлении class A;) неважно, является ли он чьим то наследником. Для размещения указателя (или, например, объявления typedef) компилятору не требуется знать иерархию наследования.
PM MAIL   Вверх
Vetos
Дата 17.12.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Ну хорошо только зря вы так, 
Мне не сложно но там просто кода дофига
Код

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

#include <vcl.h>
#pragma hdrstop

#include "Main.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
int igg=0;
class TElement{
protected:
TElement *left, *right;
TElement(TElement* L,TElement* R)
{
left=L;right=R;
}
public:
~TElement(void){delete left;delete right;}
virtual double rezult(void){};
virtual TElement* copy(void){};
virtual TElement* differ(void){};
   virtual void Set_var(double X,double Y)
   {
   if (left) left->Set_var(X,Y);
   if (right)right->Set_var(X,Y);
   }
};
class Real: public TElement{
double f;
public:
  Real(double F):TElement(NULL,NULL){f=F;}
  double rezult(void)
   {
   return f;
   }
  TElement* copy(void){return new Real(f);}
  TElement* differ(void){return new Real(0);}
};
class Var: public TElement{
double x;
AnsiString n;
public:
 Var(double X=0, AnsiString N="X"):TElement(NULL,NULL){x=X;n=N;}
 double rezult(void)
 {return x;}
 TElement* copy(void)
 {return new Var(x,n);}
 TElement* differ(void)
 {return new Real(1.0);}
 void Set_var(double X, double Y){if(n=="X")x=X;else x=Y;}
};

struct Minus:public TElement{
Minus(TElement* L,TElement* R):TElement(L,R){};
double rezult(void){
return left->rezult()-right->rezult();}
TElement* copy(void){
return new Minus(left->copy(),right->copy());}
TElement* differ(void){
return new Minus(left->differ(),right->differ());}
};


class Cos:public TElement{};
class Sin:public TElement{
double x;
AnsiString n;
public:
 Sin(double X=0, AnsiString N="X"):TElement(NULL,NULL){x=X;n=N;}
 double rezult(void)
 {return sin(x);}
 TElement* copy(void)
 {return new Sin(x,n);}
 TElement* differ(void)
 {return new Minus(new Real(0),new Cos(x,n));}
 void Set_var(double X,double Y){if(n=="X")x=X;else x=Y;}
};

class Cos:public TElement{
double x;
AnsiString n;
public:
 Cos(double X=0, AnsiString N="X"):TElement(NULL,NULL){x=X;n=N;}
 double rezult(void)
 {return cos(x);}
 TElement* copy(void)
 {return new Cos(x,n);}
 TElement* differ(void)
 {return new Sin(x,n);}
 void Set_var(double X,double Y){if(n=="X")x=X;else x=Y;}
};

struct Plus:public TElement{
Plus(TElement* L,TElement* R):TElement(L,R){};
double rezult(void){
return left->rezult()+right->rezult();}
TElement* copy(void){
return new Plus(left->copy(),right->copy());}
TElement* differ(void){
return new Plus(left->differ(),right->differ());}
};

struct Mult:public TElement{
Mult(TElement* L,TElement* R):TElement(L,R){};
double rezult(void)
{return left->rezult()*right->rezult();}
TElement* copy(void)
{return new Mult(left->copy(),right->copy());}
TElement* differ(void)
{return new Plus(new Mult(left->differ(),right->copy()),new Mult(left->copy(),right->differ()));}
};

struct Div:public TElement{
Div(TElement* L,TElement* R):TElement(L,R){};
double rezult(void)
{return left->rezult()/right->rezult();}
TElement* copy(void)
{return new Div(left->copy(),right->copy());}
TElement* differ(void)
{return new Div(new Minus(new Mult(left->differ(),right->copy()),
                          new Mult(left->copy(),right->differ())),
                          new Mult(right->copy(),right->copy()));
}
};

int PosFromEnd(AnsiString s,AnsiString sub)
{
int I=s.Length();
AnsiString p;
p.SetLength(I);
for (int i=1;i<=I;i++)
  p[I-i+1]=s[i];
if (p.Pos(sub)>0)
  return I-p.Pos(sub)+1;
  else return 0;
};
TElement* form(AnsiString s){
TElement* h;
int p,I=s.Length();
AnsiString s1,s2;
if((p=PosFromEnd(s,"+"))>1)
  {
   s1=s.SubString(1,p-1);
   s2=s.SubString(p+1,I-p);
   h=new Plus(form(s1),form(s2));
  }
  else if ((p=PosFromEnd(s,"-"))>1)
     {
      s1=s.SubString(1,p-1);
      s2=s.SubString(p+1,I-p);
      h=new Minus(form(s1),form(s2));
     }
     else if((p=PosFromEnd(s,"*"))>1)
        {
         s1=s.SubString(1,p-1);
         s2=s.SubString(p+1,I-p);
         h=new Mult(form(s1),form(s2));
        }
        else if ((p=PosFromEnd(s,"/"))>1)
            {
             s1=s.SubString(1,p-1);
             s2=s.SubString(p+1,I-1);
             h=new Div(form(s1),form(s2));
            }
            else if (s=="x") h=new Var();
              else if (s=="y") h=new Var(0,"Y");
              else h=new Real(StrToFloat(s));
              return h;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::B2Click(TObject *Sender)
{
exit(1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B1Click(TObject *Sender)
{
TElement* x  = form(E1->Text);
TElement* y  = form(E22->Text);
TElement* f  = form(E2->Text);
TElement* f1 = f->differ();
TElement* f2 = f1->differ();
TElement* f3 = f2->differ();
double X=x->rezult();
double Y=y->rezult();
MessageBox(NULL,"j","mda",MB_OK);
f->Set_var(X,Y);
f1->Set_var(X,Y);
f2->Set_var(X,Y);
f3->Set_var(X,Y);
MessageBox(NULL,"P","mda",MB_OK);
int precision=15;
int digits=StrToFloat(CSE1->Text);
E3->Text=FloatToStrF(x->rezult(),ffFixed,precision,digits);
E4->Text=FloatToStrF(f->rezult(),ffFixed,precision,digits);
E5->Text=FloatToStrF(f1->rezult(),ffFixed,precision,digits);
E6->Text=FloatToStrF(f2->rezult(),ffFixed,precision,digits);
E7->Text=FloatToStrF(f3->rezult(),ffFixed,precision,digits);
}
//---------------------------------------------------------------------------




Вотsmile


Цитата
В таком объявлении переменной A* a (равно как и в опережающем объявлении class A;) неважно, является ли он чьим то наследником. Для размещения указателя (или, например, объявления typedef) компилятору не требуется знать иерархию наследования.



Тут просто ситуация другая я вообще кое как разобрался и написал вот эту прогу, так все работает прога считает формулы и находит производные, теперь надо добать синус и косинус, а производные их противоположны вот и возникла эта проблемка и приходится обращатся за помощью


Это сообщение отредактировал(а) Vetos - 17.12.2007, 00:13


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
baldina
Дата 17.12.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



У тебя уже есть конструктор. Поэтому (по стандарту) компилятор конструктор без параметров не генерит. И не может создать переменную без параметров имеющегося конструктора.
PM MAIL   Вверх
Vetos
Дата 17.12.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Где и как это исправить?


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
baldina
Дата 17.12.2007, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



вот тут 
Код

class Cos:public TElement{};


невозможно создать экземпляр Cos т.к. не вызывается имеющийся конструктор TElement. Точнее - компилятор не может сгенерить конструктор по умолчанию для Cos, потому что для этого надо вызвать конструктор по умолчанию TElement, которого не существует
PM MAIL   Вверх
Vetos
Дата 17.12.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



так мне надо конструктор туда для Cos написать или для TElement.
я просто уже запутался, помоги разобраться.
Если у TElement нет конструктора то что тогда  вот это:
Код

class TElement{
protected:
TElement *left, *right;
TElement(TElement* L,TElement* R)<<<<<<<<<<<<<<<<Это не конструктор?
{
left=L;right=R;
}

пробовал так сделать:
Код

class Cos:public TElement{
Cos(double x,AnsiString n){x=X;n=N;};};


Тогда возникает масса ошибок, и получается что надо переписать весь класс, что мне делать smile 


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2001 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.