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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2007, 20:48   #1
umnix
 
Регистрация: 30.11.2007
Сообщений: 4
Вопрос базовые и производные классы (В чём моя ошибка)

Помогите разобраться. Я прогаю в среде BuilderC++ 6.0. Я определил класс и структуру, причем в структуре сылаюсь на мой базовый класс. Компьютер выдвает ощибку: "[C++ Error] Unit1.cpp(79): E2125 Compiler could not generate default constructor for class 'Particle'
".
Я хочу создать структуру имеющее 2 поля типа класса VectorD3D.
Ниже данн код (Заранее спасибо за помощь):



class VectorD3D
{
double x;double y; double z;
public:
VectorD3D(double xx,double xy, double xz):x(xx),y(xy),z(xz){real =xx;};
double &x1(void){return real;};
double &x2(void){return y;};
double &x3(void){return z;};
double abs(void){return (sqrt(x*x+y*y+z*z));};
static VectorD3D *last; //Адрес последнего элемента списка:
VectorD3D *prev; // На предыдущий элемент списка
VectorD3D *next; // На следующий элемент списка
friend VectorD3D operator<< (VectorD3D a,VectorD3D b){VectorD3D *xx;xx=new VectorD3D(b.x1(),b.x2(),b.x3());xx->next=a.next;xx->prev=a.prev;return *xx;};
friend VectorD3D operator| (VectorD3D a,VectorD3D b){VectorD3D *xx;xx=new VectorD3D(0,0,0);xx->x1()=a.x1()*b.x1();xx->x2()=a.x2()*b.x2();xx->x3()=a.x3()*b.x3();return *xx;};
friend VectorD3D operator*(double l,VectorD3D a){a.x1()=l*a.x1();a.x2()=l*a.x2(); a.x3()=l*a.x3();return a;}
friend VectorD3D operator*(VectorD3D a,double l){a.x1()=a.x1()*l;a.x2()=a.x2()*l; a.x3()=a.x3()*l;return a;/ }
friend VectorD3D operator/(VectorD3D a,double l){a.x1()=a.x1()/l;a.x2()=a.x2()/l;a.x3()=a.x3()/l;return a;}
friend VectorD3D operator+(VectorD3D a,VectorD3D b){a.x1()=a.x1()+b.x1();a.x2()=a.x2 ()+b.x2();a.x3()=a.x3()+b.x3();retu rn a;}
friend VectorD3D operator-(VectorD3D a,VectorD3D b){a.x1()=a.x1()-b.x1();a.x2()=a.x2()-b.x2();a.x3()=a.x3()-b.x3();return a; }
friend double operator*(VectorD3D a,VectorD3D b){return (a.x1()*b.x1()+a.x2()*b.x2()+a.x3() *b.x3()); }
private: double real;
public: void add (void) ; //Добавление элемента в конец списка

} ;
//---------------------------------------------------------------------------
// Добавление элемента в конец списка:
void VectorD3D::add(void)
{ if (last == NULL) {this -> prev = NULL;}
else {last -> next = this;
this -> prev = last;
last = this; this -> next = NULL;
};
};
//---------------------------------------------------------------------------
//
!!Atantion!!
struct Particle : public VectorD3D
{
public:
VectorD3D P;
VectorD3D X;
} t1;


/*!!Atantion!!*/[C++ Error] Unit1.cpp(79): E2125 Compiler could not generate default constructor for class 'Particle'
umnix вне форума Ответить с цитированием
Старый 30.11.2007, 21:41   #2
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

ЭЭЭЭЭ да вы батенька потрудитесь код оформить как положено... А то такой код несварение вызывает и глаза разбегаються... Смотреть противно. Да и Правила Форума Вам почитать оно наверное не вредно будет !!!
merax вне форума Ответить с цитированием
Старый 30.11.2007, 22:11   #3
umnix
 
Регистрация: 30.11.2007
Сообщений: 4
По умолчанию

Помогите разобраться. Я прогаю в среде BuilderC++ 6.0. Я определил класс и структуру, причем в структуре сылаюсь на мой базовый класс. Компьютер выдвает ощибку: "[C++ Error] Unit1.cpp(79): E2125 Compiler could not generate default constructor for class 'Particle'
".
Я хочу создать структуру имеющее 2 поля типа класса VectorD3D.
Ниже данн код (Заранее спасибо за помощь):




class VectorD3D
{
double x;double y; double z;
public:
VectorD3D(double xx,double xy, double xz):x(xx),y(xy),z(xz){};
double &x1(void){return x;};
double &x2(void){return y;};
double &x3(void){return z;};
double abs(void){return (sqrt(x*x+y*y+z*z));};
static VectorD3D *last; //Адрес последнего элемента списка:
VectorD3D *prev; // На предыдущий элемент списка
VectorD3D *next; // На следующий элемент списка
} ;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
struct Particle : public VectorD3D
{
public:
VectorD3D P;
VectorD3D X;
} t1;


/*!!Atantion!!*/
[C++ Error] Unit1.cpp(79): E2125 Compiler could not generate default constructor for class 'Particle'
umnix вне форума Ответить с цитированием
Старый 30.11.2007, 22:13   #4
umnix
 
Регистрация: 30.11.2007
Сообщений: 4
По умолчанию

Это текст с преоформленым кодом, выполненный по просбе merax. NB!Ошибка, при этом, та же.
umnix вне форума Ответить с цитированием
Старый 01.12.2007, 16:33   #5
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

у тебя 1 конструтор
Код:
VectorD3D(double xx,double xy, double xz):x(xx),y(xy),z(xz){};
а тут
Код:
struct Particle : public VectorD3D
{
public:
VectorD3D P;
VectorD3D X;
} t1;
создается (неявно) дефолтный конструктор Particle(), который (неявно) вызывает дефолтный конструктор VectorD3D()

напиши так
Код:
struct Particle : public VectorD3D {
 Particle() : VectorD3D(0, 0, 0), P(0, 0, 0), X(0, 0, 0){}
 VectorD3D P;
 VectorD3D X;
} t1;
или определи в VectorD3D конструктор, не принимающий аргументов
Код:
VectorD3D():x(0),y(0),z(0){};
Alek86 вне форума Ответить с цитированием
Старый 01.12.2007, 17:26   #6
umnix
 
Регистрация: 30.11.2007
Сообщений: 4
По умолчанию

Спасибо!! Очень признателен за информативный ответ.
umnix вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в php Romanbl4 PHP 3 08.08.2008 07:09
Классы Старовъръ Общие вопросы Delphi 4 26.06.2008 17:00
С++ Производные классы (Ошибка) Sweta Помощь студентам 9 23.04.2008 12:58
Классы Mickle Общие вопросы Delphi 1 07.05.2007 12:16