Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
#1

Помогите отредактировать прогу с классами!!! - C++

14.11.2010, 16:15. Просмотров 1005. Ответов 17
Метки нет (Все метки)

помогите пожалуйста, я не знаю почему он мне выдает ошибки(((
вот условие:Описать класс-контейнер массив указателей "Отрезок на плоскости" (TLine) и "Окружность" (TCircle) .
Дан текстовый файл, содержащий информацию о вышеуказанных объектах (не менее 10 строк). Например:
точка 5 6 blue
отрезок 2 3 5 7 red
окружность 5 5 10 white
окружность 6 8 5 black
отрезок 3 4 8 8 blue
Необходимо прочитать данные из текстового файла и разместить в классе-контейнере. Реализовать методы класса-контейнера: конструктор, распечатка данных о массиве,

вот текст:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>

using namespace std;
class point
{
protected:
int x,y;char cvet[20];
public:

point(int a,int b,char cv[20]){x=a,y=b,strcpy(cvet,cv);}

virtual void print()
{cout<<"tochka"<<endl;
};
};


class circle: public point

{
protected:
int radius;
public:

circle(int a, int b, char cv[20],int rad) : point(a,b,cv){radius=rad;};
void print(){cout<<"okrugnost"<<endl;};
}
;
class pramaya:
public point
{protected:
int x2,y2;
public:

pramaya(int a, int b,char cv[20] ,int x3,int y3): point(x,y,cvet){x2=x3;y2=y3;};
void print(){cout<<"pramaya"<<endl;};
};


class maspoint
{
point **mas;
int n;
public:
maspoint(char name[20]);
FILE *in;

int k=0; int a,b,rad,x3,y3;
char line[255], type[10],cv[20];

if((in=fopen(name,"r"))!=NULL)
{
while(!feof(in))
{
fgets(line,255,in);
k++;
};
n=k;
fclose(in);
mas=new point *[n];
in=fopen(name,"r");
k=0;
while(!feof(in))
{
fscanf(in,"%s",type);
fscanf(in,"%d",&a);
fscanf(in,"%d",&b);
if(strcmp(type,"pramaya")==0);
{
fscanf(in,"%d",&x3);
fscanf(in,"%d",&y3);
fscanf(in,"%s",cv);
mas[k]=new pramaya(a,b,x3,y3,cv);
}
if (strcmp(type,"circle")==0);
{fscanf(in,"%d",&rad);
fscanf(in,"%s",cv);
mas[k]=new circle(a,b,rad,cv);
}
k++;
};
fclose(in);
}
else
{
cout<<"net faila";
n=0;
mas=NULL;
};

void print()
{
for(int i=0;i<n;i++)
mas[i]->print();
}
;
};


void main()
{
char fname[20];
cout<<"vvedite ima faila";
cin>>fname;
maspoint m(fname);
m.print;
getch();}


ну и вот ошибки:
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(16) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74): см. объявление 'strcpy'
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(54) : error C2864: maspoint::k: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(57) : error C2059: синтаксическая ошибка: if
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(58) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(90) : error C2059: синтаксическая ошибка: else
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(91) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(112) : error C3867: maspoint:: print: в вызове функции отсутствует список аргументов; используйте "&maspoint:: print" для создания указателя на член




заранее спасибо))
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2010, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите отредактировать прогу с классами!!! (C++):

Помлгите отредактировать прогу - C++
Знайти суму елементів рядків із від’ємними елементами на головній діагоналі квадратної матриці порядку n . #include &lt;stdio.h&gt;...

Помогите разобраться с классами в C++ - C++
Есть задание по ООП С++ Используя классы создать кольцо.Записи кольца включают в себя указатели на очередь, содержащую указатели на на...

ПОМОГИТЕ отредактировать задачку! - C++
Я полностью запутался! и уже не понимаю как правильно задан вопрос! вообще уже каша....... Поле шахматной доски определяется парой...

Помогите переписать прогу - C++
Пож помогите переписать кодик из C++Builder в Visual С++!!! Ее кодик находится в документе KursovayaUnit.txt!!!

Помогите написать прогу. - C++
Написать программу, которая: 1) спрашивает у пользователя имя файла ( .txt); 2) считывает из него 100 символов.; 3) записывает в файл...

Помогите написать прогу.. - C++
Создать программу, которая реализует журнал с оценками в виде двумерного массива (студенты - строки, оценки за контрольные - столбцы)....

17
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.11.2010, 16:39 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я приведу более сокращенный код в котором приведу Ваши ошибки:
C++
1
2
3
4
5
6
7
8
9
10
class A
{
protected:
int x,y;
int hh=5;// Так делать нельзя поэтому - maspoint::k: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
if(hh>1)// так тоже делать нельзя поэтому - error C2059:,  error C2059:
x=5;
else
x=6;
};
C++
1
2
3
4
5
6
7
8
void main()
{
char fname[20];
cout<<"vvedite ima faila";
cin>>fname;
maspoint m(fname);
m.print;// так функции не вызываются поэтому - error C3867:
getch();}
3
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,273
Записей в блоге: 2
Завершенные тесты: 1
14.11.2010, 16:40 #3
Вам же компилятор по-русски написал, даже строки указал!!!
например:
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(54) : error C2864: maspoint::k: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
смотрим, что там, ага видим не правильно оформленный код, и что, номера строк считать?
Оформите код в теге [СРР]код вставлять здесь[/СРР] и прочитайте, что пишет компилятор.
2
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
14.11.2010, 18:48  [ТС] #4
все,осталось только error 2059(((
1
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,273
Записей в блоге: 2
Завершенные тесты: 1
14.11.2010, 19:19 #5
Ну вот))) Покажите код который получился, только в теге выделения кода, с указанием строки с ошибкой.
1
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
15.11.2010, 05:02  [ТС] #6
[СРР]bbd
fd[/СРР]
1
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.11.2010, 05:11 #7
sabaka_2007, имелось ввиду что Вы вот что покажете:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
 
using namespace std;
class point
{
protected:
int x,y;char cvet[20];
public:
 
point(int a,int b,char cv[20]){x=a,y=b,strcpy(cvet,cv);}
 
virtual void print()
{cout<<"tochka"<<endl;
};
};
 
 
class circle: public point
 
{
protected:
int radius;
public:
 
circle(int a, int b, char cv[20],int rad) : point(a,b,cv){radius=rad;};
void print(){cout<<"okrugnost"<<endl;};
}
;
class pramaya:
public point
{protected:
int x2,y2;
public:
 
pramaya(int a, int b,char cv[20] ,int x3,int y3): point(x,y,cvet){x2=x3;y2=y3;};
void print(){cout<<"pramaya"<<endl;};
};
 
 
class maspoint
{
point **mas;
int n;
public:
maspoint(char name[20]);
FILE *in;
 
int k=0; int a,b,rad,x3,y3;
char line[255], type[10],cv[20];
 
if((in=fopen(name,"r"))!=NULL)
{
while(!feof(in))
{
fgets(line,255,in);
k++;
};
n=k;
fclose(in);
mas=new point *[n];
in=fopen(name,"r");
k=0;
while(!feof(in))
{
fscanf(in,"%s",type);
fscanf(in,"%d",&a);
fscanf(in,"%d",&b);
if(strcmp(type,"pramaya")==0);
{
fscanf(in,"%d",&x3);
fscanf(in,"%d",&y3);
fscanf(in,"%s",cv);
mas[k]=new pramaya(a,b,x3,y3,cv);
}
if (strcmp(type,"circle")==0);
{fscanf(in,"%d",&rad);
fscanf(in,"%s",cv);
mas[k]=new circle(a,b,rad,cv);
}
k++;
};
fclose(in);
}
else 
{
cout<<"net faila";
n=0;
mas=NULL;
};
 
void print()
{
for(int i=0;i<n;i++)
mas[i]->print();
}
;
};
 
 
void main()
{
char fname[20];
cout<<"vvedite ima faila";
cin>>fname;
maspoint m(fname);
m.print;
getch();}
Только сравните, как код выглядит у меня и у Вас в первом сообщении.
Для этого есть кнопочка 'C++' сверху где печатаете ответ
1
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
15.11.2010, 05:12  [ТС] #8
Код
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>

using namespace std;
class point
{
protected:
int x,y;char cvet[20];
public:
	
	point(int a,int b,char cv[20]){x=a,y=b,strcpy(cvet,cv);}

	virtual void print()
	{cout<<"tochka"<<endl;
	};
};


class circle:public point
	
{
protected:
	int radius;
public:

	circle(int a, int b, char cv[20],int rad):point(a,b,cv){radius=rad;};
	void print(){cout<<"okrugnost"<<endl;};
}
;
class pramaya:
	public point
{protected:
	int x2,y2;
public:
	
	pramaya(int a, int b,char cv[20] ,int x3,int y3):point(x,y,cvet){x2=x3;y2=y3;};
	void print(){cout<<"pramaya"<<endl;};
};


class maspoint
{
	point **mas;
int n;
public:
	maspoint(char name[20]);
	FILE *in;
	
	//int k=0; 
	int a,b,rad,x3,y3;
char line[255], type[10],cv[20];



if ((in=fopen(name,"r"))!=NULL)
{int k=0;
	while(!feof(in))
	{
		fgets(line,255,in);
	k++;
	};
	n=k;
	fclose(in);
	mas=new point *[n];
	in=fopen(name,"r");
	int k=0;
	while(!feof(in))
	{
		fscanf(in,"%s",type);
fscanf(in,"%d",&a);
fscanf(in,"%d",&b);
if(strcmp(type,"pramaya")==0);
{
	fscanf(in,"%d",&x3);
fscanf(in,"%d",&y3);
fscanf(in,"%s",cv);
mas[k]=new pramaya(a,b,x3,y3,cv);
}
if (strcmp(type,"circle")==0);
{fscanf(in,"%d",&rad);
fscanf(in,"%s",cv);
mas[k]=new circle(a,b,rad,cv);
}
k++;
	};
	fclose(in);
}
else{
	cout<<"net faila";
n=0;
mas=NULL;
};

void print()
{
	for(int i=0;i<n;i++)
		mas[i]->print();
}
;
};


void main()
{
	char fname[20];
	cout<<"vvedite ima faila";
	cin>>fname;
	maspoint m(fname);
	m.print();
getch();}
Код
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(60) : error C2059: синтаксическая ошибка: if
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(60) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(61) : error C2059: синтаксическая ошибка: {
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(61) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(93) : error C2059: синтаксическая ошибка: else
1>c:\users\максим\documents\visual studio 2008\projects\крист\крист\крист.cpp(93) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.11.2010, 05:18 #9
Ну у Вас осталась таже ошибка что и вчера: Вам нужно почитать про классы. В описании классов можно объявлять переменные, функции. Но нельзя в описании вести какие либо вычисления.
Еще раз:
C++
1
2
3
4
5
6
7
8
9
10
class A
{
protected:
int x,y;
int hh;
if(hh>1)// так делать нельзя
x=5;
else
x=6;
};
Посмотрите и сравните что у Вас в описании класса maspoint
1
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
15.11.2010, 15:25  [ТС] #10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Ну у Вас осталась таже ошибка что и вчера: Вам нужно почитать про классы. В описании классов можно объявлять переменные, функции. Но нельзя в описании вести какие либо вычисления.
Еще раз:
C++
1
2
3
4
5
6
7
8
9
10
class A
{
protected:
int x,y;
int hh;
if(hh>1)// так делать нельзя
x=5;
else
x=6;
};
Посмотрите и сравните что у Вас в описании класса maspoint

то есть мне надо все эти вычисления обозвать какой-либо функцией,я правильно поняла?

Добавлено через 26 минут
всёёёё,огромное спасибо)))
все работает))))
какая же я была глупенькая)))
1
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,273
Записей в блоге: 2
Завершенные тесты: 1
15.11.2010, 15:29 #11
Цитата Сообщение от sabaka_2007 Посмотреть сообщение
то есть мне надо все эти вычисления обозвать какой-либо функцией,я правильно поняла?
Это можно сделать в конструкторе класса!

P.S. Только, если я не ошибаюсь, если у вас код похож на пример valeriikozlov, то в конструкторе так делать нельзя (т.е. задавать значение одного члена класса в зависимости от значения другого), т.к. стандарт не гарантирует какой член класса будет инициализирован первым. Т.е. инициализация может происходить не в том порядке, как вы написали и может случится так, что член в if еще не определен, что естественно приведет к неправильной инициализации второго члена.
1
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
15.11.2010, 18:53  [ТС] #12
что-то теперь он мне ругается на:
mas[i]->print();

вроде проверила,все правильно

Добавлено через 28 минут
Цитата Сообщение от sabaka_2007 Посмотреть сообщение
что-то теперь он мне ругается на:
mas[i]->print();

вроде проверила,все правильно
ошибку не выдает,просто при вводе имени файла вылетает,и в окошечке пишет:Необработанное исключение в "0x010c2646" в "крист.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcdcd".
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.11.2010, 19:05 #13
sabaka_2007, еще раз выложите весь код который у Вас сейчас.
0
sabaka_2007
4 / 4 / 0
Регистрация: 14.11.2010
Сообщений: 11
15.11.2010, 19:13  [ТС] #14
Код
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>

using namespace std;
class point
{
protected:
int x,y;char cvet[20];
public:
	int getx(){return x;};
	int gety(){return y;}
	
	point(int a,int b,char cv[20]){x=a,y=b,strcpy(cvet,cv);}

	virtual void print()
	{cout<<"точка"<<"x="<<getx()<<"y="<<gety()<<endl;
	};
virtual double dlina()
{return 0;};
virtual double plosad()
{return 0;};

	
};

//---------------------------------------------------------------------------------
class circle:public point
	
{
protected:
	int radius;
public:

	circle(int a, int b, char cv[20],int rad):point(a,b,cv){radius=rad;};
	void print(){cout<<"окружность:"<<"x="<<getx()<<"y="<<gety()<<"радиус="<<radius<<endl;};


 double dlina()
 {
	 double z;
  z=2*3,14*radius;
  return z;
 };
 double plosad()
{
		double q;
		 q=3,14*radius*radius;
	return q;
 };
};
//---------------------------------------------------------------------------------
class pramaya:
	public point
{
protected:
	int x2,y2;
public:
	
	pramaya(int a, int b,char cv[20] ,int x3,int y3):point(x,y,cvet){x2=x3;y2=y3;};
	void print(){cout<<"прямая"<<"начальные координаты:("<<getx()<<","<<gety()<<")"<<"конечные координаты:("<<x2<<","<<y2<<")"<<endl;
	};
	double dlina()
	{
	double z;
    z= sqrt(double ((x2-getx())*(x2-getx())+(y2-gety())*(y2-gety())));

    return z;
	}
	double plosad()
	{return 0;};


};

//---------------------------------------------------------------------------------
class maspoint
{
	point **mas;
int n;
public:
	maspoint(char name[20])
	{
		FILE *in;
	
	
	int k=0,a,b,rad,x3,y3;
char line[255], type[10],cv[20];



if ((in=fopen(name,"r"))!=NULL)
{
	int k=0;
	while(!feof(in))
	{
		fgets(line,255,in);
	    k++;
	};
	n=k;
	fclose(in);
	mas=new point *[n];
	in=fopen(name,"r");
	
	while(!feof(in))
	{
		fscanf(in,"%s",type);
        fscanf(in,"%d",&a);
        fscanf(in,"%d",&b);
		if(strcmp(type,"point")==0)
		{  fscanf(in,"%s",cv);
    mas[k]=new point(a,b,cv);
}

        if(strcmp(type,"pramaya")==0)
{
	fscanf(in,"%d",&x3);
    fscanf(in,"%d",&y3);
    fscanf(in,"%s",cv);
    mas[k]=new pramaya(a,b,cv,x3,y3);
}
if (strcmp(type,"circle")==0)
{fscanf(in,"%d",&rad);
fscanf(in,"%s",cv);
mas[k]=new circle(a,b,cv,rad);
}
k++;
	};
	fclose(in);
}

else
{
	cout<<"нет файла"<<endl;
n=0;
mas=NULL;
};
	}

void print()
{
	for(int i=0;i<n;i++)
		mas[i]->print();
};
double summadlin()
{
	double s=0;
for(int i=0;i<n;i++)
s+=mas[i]->dlina();
return s;
}

double summaplosad()
{
	double s=0;
for(int i=0;i<n;i++)
s+=mas[i]->plosad();
return s;
}

};

//---------------------------------------------------------------------------------
void main()
{
	setlocale (LC_ALL, "Russian");
	char fname[20];
	cout<<"введите имя файла"<<endl;
	cin>>fname;
	maspoint m(fname);
	m.print();
	cout<<"сумма длин="<<m.summadlin()<<endl<<"сумма площадей="<<m.summaplosad()<<endl;
getch();
}
это она уже доделанная
вот полное условие:
Описать класс-контейнер (массив указателей на объекты класса "Точка на плоскости", "Отрезок на плоскости" и "Окружность"
Дан текстовый файл, содержащий информацию о вышеуказанных объектах (не менее 10 строк). Например:
точка 5 6 blue
отрезок 2 3 5 7 red
окружность 5 5 10 white
окружность 6 8 5 black
отрезок 3 4 8 8 blue
Необходимо прочитать данные из текстового файла и разместить в классе-контейнере. Реализовать методы класса-контейнера: конструктор, деструктор, распечатка данных об объектах массива, вычислить сумму длин всех объектов, вычислить сумму площадей всех объектов

Добавлено через 1 минуту
147 153 161 строчки,где-то там проблемы
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.11.2010, 19:39 #15
sabaka_2007, Примерно картина ясная. Напишите что у Вас записано в файле, из которого Ваша программа считывает данные.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 19:39
Привет! Вот еще темы с ответами:

помогите написать прогу - C++
написать прогу вычисления S={ (1n-2n^2)/(1+2n), pcn-2n^2≤1 2(n-2n^2) n1-2n^2

Помогите исправить прогу - C++
Пожалуйста помогите исправить прогу...игра в &quot;очко&quot;...прога компилируется, но работает не совсем верно...т.к. постояно выбирает одни и те...

Помогите написать прогу в С++ - C++
Люди пожалуйста помогите написать в С++ программы для задач ,буду очень благодарен Задача1 Lin18. Найти решение системы уравнений вида...

Помогите написать простую прогу - C++
Вообщем у меня контроша по C и мне надо написать прогу для вычисления вот этой функции -&gt; (1+x*x)*atan(x)-x где x*x-&gt; x в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
15.11.2010, 19:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru