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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2009, 21:28   #1
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
Восклицание Коструктор bc 3.1

Подскажите почему при компиляции программы выскакивает ошибка
Could not find a match for 'Circle::Circle(int,int,int,double)
на строчке помеченной красным цветом. Я так понял что компилятор не может найти нужного конструктора, но конструктор описан вроде правильно.
Вот код программы

файл main.cpp
Код:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "FIGURES.H"


void main()
{
   clrscr();
	init();
	Figure *pFig[10]={NULL};
	pFig[0]=new Circle(100,100,1,100.0);
	pFig[1]=new Triangle;
	pFig[2]=new Rectangle;
	for(int i=0; pFig[i]!=NULL; i++) pFig[i]->Show();
	getch();
	closegraph();

}
файл Figure.cpp
Код:
#include <graphics.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include "FIGURES.H"

void init()
{
	int gdriver = DETECT, gmode, errorcode;
	initgraph(&gdriver, &gmode, "D:\\BORLANDC\\BGI");

	errorcode = graphresult();
	if (errorcode != grOk)
	{
		printf("Graphics error: %s\n", grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		exit(1);
	}

}

Figure::Figure()
{
	Init();
}
/*
Figure::Figure(int _x, int _y, double sz)
{
	x=_x;
	y=_y;
	size=sz;
}*/

Figure::Figure(int _x, int _y, int color, double size)
{

	Init();
	MoveTo(_x, _y);
	SetColor(color);
	SetSize(size);
}


void Figure::Init()
{
	color=1;
	x=y=1;
	size=1;
}


void Figure::Show()
{
	cout <<"\nFigure\n";
}

void Circle::Show()
{

	circle(x,y,size);

}

void Triangle::Show()
{
	line(100,100,150,150);
	line(100,100,50,150);
	line(50,150,150,150);
}

void Rectangle::Show()
{
	  rectangle(300,300,400,400);
}
файл Figure.h
Код:

#ifndef __FIGURES_H__
#define __FIGURES_H__
#include <graphics.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>


class Figure
{
public:
	Figure();
	Figure(int, int, int, double);
	void Init();


	int GetColor()		{ return color; }
	int GetX()			{ return x; }
	int GetY()			{ return y; }
	double GetSize()	{ return size; }

	void MoveTo(int _x, int _y)	{ SetX(_x); SetY(_y); }
	void MoveRel (int dx, int dy) { SetX(dx+x); SetY(dy+y); }
	void SetX(int _x)					{ if(_x>0) x=_x; }
	void SetY(int _y)					{ if(_y>0) y-_y; }
	void SetSize(double sz)			{ if(sz>0) size=sz; }
	void SetColor(int cl)			{ color=cl; }

	virtual void Show()=0;

protected:
	int x, y, r;
	double size;
	int color;
};

class Circle : public Figure
{
	virtual void Show();
};

class Rectangle : public Figure
{
	virtual void Show();
};

class Triangle : public Figure
{
	virtual void Show();
};

void init();

#endif
Помогите пожалуйста, то что то не могу найти в чём ошибка
Nitrino вне форума Ответить с цитированием
Старый 29.11.2009, 21:32   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Конструкторы(так же как и деструкторы) не наследуются, для каждого наследуемого класса необходимо описывать свои конструкторы:
Код:
class Circle : public Figure {
public:
    Circle(int x, int y, int color, double size) : Figure(x, y, color, size) // Вызываем конструктор базового класса
    { }
};
netrino вне форума Ответить с цитированием
Старый 29.11.2009, 21:46   #3
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Попробовал написать так
Код:
class Circle : public Figure
{
	Circle(int x, int y, int color, double size):Figure(x,y,color,size)
	{}
	virtual void Show();
};
теперь выдаёт ошибку
Error MAIN.CPP 13: 'Circle::Circle(int,int,int,double) ' is not accessible
Nitrino вне форума Ответить с цитированием
Старый 29.11.2009, 21:51   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Правильно, потому что
Код:
class X
{
Y y;
//...
}
это по умолчанию
Код:
class X
{
private:
Y y;
//...
}
Напишите вначале public:
Код:
class Circle : public Figure
{
	public:
	Circle(int x, int y, int color, double size):Figure(x,y,color,size)
	{}
	virtual void Show();
};
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.11.2009, 21:57   #5
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Спасибо большое))
Nitrino вне форума Ответить с цитированием
Ответ


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

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

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