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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 16:38   #1
salwator
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 31
По умолчанию класс фигура от которого наследуется круг

Доброго времени суток.Помогите разобраться с ошибкой.При запуске программы выдаёт ошибку:
First chance exception at $7510B9BC. Exception class EAccessViolation with message 'Access violation at address 00401AAE in module 'Project1.exe'. Write of address 00000004'. Process Project1.exe (5196). И указывает на строку:
mass->x=mass->y=random(100)+rad;

Код:
#include "math.h"

const n=5;

class figura
{
	private:

	public:
		virtual void operator +(int offset)=0;
		virtual TPoint operator [](short p){};
		virtual void Perenos(int a){};
		virtual double Perimetr()=0;
	    virtual void vivod(TListBox *ListBox3){};
};

class mn_u: public figura     //пятиугольник
{
	private:
		TPoint mass[n];
	public:
		mn_u()
		{
			for(int i = 0 ; i < n ; i++)
			{
				mass[i].x=random(100);
				mass[i].y=random(100);
			}
		};
		virtual double Perimetr()
		{
			double per=0;
			for(int i = 0 ; i < n-1 ; i++)
				per+=sqrt(pow(mass[i].x-mass[i+1].x,2)+pow(mass[i].y-mass[i+1].y,2));
				per+=sqrt(pow(mass[0].x-mass[n-1].x,2)+pow(mass[0].y-mass[n-1].y,2));
			return per;
		};
		TPoint operator [](short p)
		{
			return mass[p-1];
		};
		virtual void operator +(int offset)
		{
			for (int i = 0; i < n; i++)
			{
				mass[i].x+=offset;
			}
		};
		virtual void Perenos(int a)
		{
			for (int i = 0; i < n; i++)
			{
				mass[i].x+=a;
			}
		}
};

class krug: public figura      //круг
{
	int rad;
	TPoint * mass;
	public:
		krug()
			{
				rad=random(100);
				mass->x=mass->y=random(100)+rad;
			};
			virtual void operator +(int offset)
			{
				mass->x+=offset;
			};
			virtual double Perimetr()
			{
				return 2*M_PI*rad;
			};
			virtual void vivod(TListBox *ListBox3)
			{
				AnsiString centrx,centry;
				centrx=mass->x;
				centry=mass->y;
				ListBox3->Items->Add("("+centrx+
				";"+centry+" радиус:"+rad+")");
			}
};
salwator вне форума Ответить с цитированием
Старый 09.12.2012, 16:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

mass у тебя где создается? Или это весь код?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2012, 18:22   #3
salwator
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 31
По умолчанию

Код:
class krug: public figura      //круг
{
	int rad;
	TPoint * mass;
	public:
		krug()
			{
salwator вне форума Ответить с цитированием
Старый 09.12.2012, 18:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет тут создания. Уж пиши тогда так:
Код:
TPoint * mass=new TPoint;
или не используй указатели
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2012, 19:48   #5
salwator
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 31
По умолчанию

в таком случае тоже не работает пишет:
[BCC32 Error] figura.h(62): E2233 Cannot initialize a class member here
salwator вне форума Ответить с цитированием
Старый 09.12.2012, 20:28   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну значит в конструкторе пропиши создание этого объекта
Ты ведь понимаешь где у тебя конструктор класса?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2012, 21:14   #7
salwator
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 31
По умолчанию

я его уже прописывал в конструкторе.В этом случае он ругается на mass в перегрузке оператора + и в Периметре ,пишет что неизвестный символ mass.
salwator вне форума Ответить с цитированием
Старый 09.12.2012, 22:25   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотри как бы я делал:
Код:
// gg.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "math.h"
#include <stdlib.h>

//using namespace std;

const int n=5;

class TPoint{public:double x;double y;};

class figura
{
	private:

	public:
	    virtual void vivod(){};
		virtual void operator +(int offset)=0;
		
		virtual void Perenos(int a){};
		virtual double Perimetr()=0;
};

class krug: public figura      //круг
{
	int rad;
	TPoint mass;
	public:
		krug(){
				//mass=new TPoint;
				rad=rand();
				mass.x=mass.y=rand()+rad;
			};
			 void vivod(){
				 printf("Radius=%d\t X=%f\tY=%f",rad,mass.x,mass.y);
			}
			 void operator +(int offset){
				 mass.x+=offset;
			 };
			
			void Perenos(int a){};
			double Perimetr(){return 2*3.14*rad;};
};

int _tmain(int argc, _TCHAR* argv[])
{

	krug *k=new krug();
	k+10;
	k->vivod();
	getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2012, 23:14   #9
salwator
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 31
По умолчанию

Спасибо. Всё работает.
salwator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс "фигура" C++ Melloo Помощь студентам 3 17.10.2013 11:26
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
фигура в делфи gunplay Общие вопросы Delphi 0 18.01.2011 16:50
фигура-грани lex1398 Помощь студентам 2 28.08.2010 09:54