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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2012, 19:38   #1
whh
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию Динамический массив обьектов(С++)

Добрый день, имеется программа, в которой нужно создать динамический массив обьектов. Как ни пробовал, вылазит одна и та же ошибка
no operator "=" matches these operands
Код:
int main()
{
	int N;
	cin>>N;
	setlocale(LC_ALL, "Russian");
	Cfile *ptst, **p1[N];
	for(int i=0; i<N; i++)
	   *(ptst+i)=0;  //вот тут и вылазит ошибка..
	char name1[L];
	int data1, kol1;
	float mem1;

	ptst = new Cfile[N];
	for (int i=0; i<N; i++)
                ptst[i] = new Cfile(); //вот тут и вылазит ошибка..

	for(int i=0; i<N; i++)
	{
		cout<<"\nВведите название файла ";
		cin>>name1;
		(*(ptst+i))->Setname(name1);
		cout<<"\nВведите занятую память ";
		cin>>mem1;
		(*(ptst+i))->Setmemory(mem1);
		cout<<"\nВведите дату ";
		cin>>data1;
		(*(ptst+i))->Setdata(data1);
		cout<<"\nВведите количество ";
		cin>>kol1;
		(*(ptst+i))->Setkol(kol1);
		cout<<"\n";
	}

Последний раз редактировалось whh; 06.11.2012 в 19:51.
whh вне форума Ответить с цитированием
Старый 06.11.2012, 19:57   #2
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Код:
for(int i=0; i<N; i++)
	   *(ptst+i)=0
Что вы хотите здесь сделать??? инициализировать элементы массива??? Тут же пока память не захвачена, вы её только вот тут захватываете.
Код:
ptst = new Cfile[N]
А тут что? У вас ptrst объявлен как указатель. Сначала вы захватываете память под N элементов типа Cfile
Код:
ptst = new Cfile[N];
А потом через каждый элемент( не через указатель!!!) хотите захватить ещё память. Так нельзя захватывать, через указатель нужно
Код:
	for (int i=0; i<N; i++) 
                ptst[i] = new Cfile()
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com

Последний раз редактировалось kventin_zhuk; 06.11.2012 в 21:06.
kventin_zhuk вне форума Ответить с цитированием
Старый 06.11.2012, 21:01   #3
whh
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

Спасибо, делал, вылазит та же ошибка

Код:
Cfile *ptst;
	ptst = new Cfile[N];
	for (int i=0; i<N; i++) 
                 ptst[i] = new Cfile();
no operator "=" matches these operands

Последний раз редактировалось whh; 06.11.2012 в 21:16.
whh вне форума Ответить с цитированием
Старый 06.11.2012, 21:12   #4
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Вам нужно создать динамический массив.( допустим массив элементов типа Cfile ). Делаете так:
Код:
 Сfile *ptstr;
int n; // объявили указатель на тип Cfile
cout << "введите размерность массива";
сin >> n;
ptrsr = new Cfile [n];
for (int i = 0; i < n; i++)
{
   pstr[i] = 0;// инициализируем созданный динамический массив нулями.
}
Это одномерный массив. Код не компилировал, но последовательность такая. А дальше то, что вам нужно по ходу программы.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 06.11.2012, 21:19   #5
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Цитата:
Сообщение от whh Посмотреть сообщение
Спасибо, делал, вылазит та же ошибка

Код:
Cfile *ptst;
	ptst = new Cfile[N];
	for (int i=0; i<N; i++) 
                 ptst[i] = new Cfile();
no operator "=" matches these operands
Тут тоже нельзя. (в прошлой мессаге добавил) Вы фактически пытаетесь переменной(под которую захватили память ранее) захватить ещё память. Для чего это вам, вы хотите двухмерный массив сделать что ли?
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 06.11.2012, 21:22   #6
вячеслав11
Новичок
Джуниор
 
Регистрация: 06.11.2012
Сообщений: 1
По умолчанию

НАРОД НУЖНА ГОТОВАЯ ИНФОРМАЦИОННАЯ СИСТЕМА ( С БАЗОЙ ДАННЫХ ,ЗАПРОСАМИ И Т Д ) !!! МОЖЕТ КТО - НУБУДЬ ПОМОЧ ?? МОЖЕТ У КОГО ГОТОВАЯ ЕСТЬ
вячеслав11 вне форума Ответить с цитированием
Старый 06.11.2012, 21:28   #7
whh
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

Код:
Cfile *ptst;
	int N; // объявили указатель на тип Cfile
	cout<<"введите размерность массива  ";
	cin>>N;
	ptst = new Cfile [N];
	for (int i = 0; i < N; i++)
	{
		ptst[i] = 0;// инициализируем созданный динамический       массив нулями.
	}
все-равно та же ошибка..
whh вне форума Ответить с цитированием
Старый 06.11.2012, 21:31   #8
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Скидывайте код весь. Только только весь а не кусками. Гляну. То что написал у меня компилируется без ошибок.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 06.11.2012, 21:35   #9
whh
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

main.cpp
Код:
#include "Cfile.h"
#include <locale.h>
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;

void zagolovok();
void out(Cfile **, int);
void sort(Cfile **, int);

int main()
{
	setlocale(LC_ALL, "Russian");
	Cfile *ptst;
	int N; // объявили указатель на тип Cfile
	cout<<"введите размерность массива  ";
	cin>>N;
	ptst = new Cfile [N];
	char name1[L];
	int data1, kol1;
	float mem1;
	for(int i=0; i<N; i++)
	{
		cout<<"\nВведите название файла ";
		cin>>name1;
		cout<<"\nВведите занятую память ";
		cin>>mem1;
		cout<<"\nВведите дату ";
		cin>>data1;
		cout<<"\nВведите количество ";
		cin>>kol1;
		cout<<"\n";
		(*(ptst+i)) = new Cfile(name1, mem1, data1, kol1);
	}
	zagolovok();
	out(ptst, N);
	sort(ptst, N);
	zagolovok();
	out(ptst, N);
	delete [] ptst;
	_getch();
}

void sort(Cfile **p, int N)
{
	int i, k=1;
	Cfile *q=NULL;
	while (k)
	{
		k=0;
		for (i=0;i<N-1;i++)
		{
			if(strcmp((*(p+i))->Getname(), (*(p+i+1))->Getname())>0)
			{
				q=*(p+i);
				*(p+i)=*(p+i+1);
				*(p+i+1)=q;
				k=1;
			}
		}
	}
}

void out(Cfile **ptst, int N)
{
	for(int i=0; i<N; i++)
		(*(ptst+i))->Show();
}

void zagolovok()
{
	cout<<setw(10)<<setiosflags(ios::left)<<"Название файла  "
	<<setw(10)<<setiosflags(ios::left)<<"Память  "
	<<setw(10)<<setiosflags(ios::left)<<"Дата "
	<<setw(10)<<setiosflags(ios::left)<<"Кол-во  "<<endl;
}
}
Cfile.h
Код:
#pragma once
#ifndef __CLLBH_H 
#define __CLLBH_H
#define L 20
#include <string.h>

class Cfile
{
private:
	char name[L];
	float memory;
	int data;
	int kol;
public:
	Cfile(){};
	Cfile(char *name1, float mem1, int data1, int kol1)
	{
		strcpy_s(name, name1); 
		memory=mem1;
	    data=data1; 
		kol=kol1;
	};
	void Setname(char *name1);
	void Setmemory(float mem1);
	void Setdata(int data1);
	void Setkol(int kol1);
	char *Getname();
	char Getname1();
	float Getmem();
	int Getdata();
	int Getkol();
	void Show();
	~Cfile(){};
};
#endif
Cfile.cpp
Код:
#include "Cfile.h"
#include <string.h>
#include <iostream>
#include <iomanip>
using namespace std;

void Cfile::Setname(char *name1)
{
	strcpy_s(name, name1);
}

void Cfile::Setmemory(float mem1)
{
	memory=mem1;
}

void Cfile::Setdata(int data1)
{
	data=data1;
}

void Cfile::Setkol(int kol1)
{
	kol=kol1;
}

char *Cfile::Getname()
{
	return name;
}

char Cfile::Getname1()
{
	return name[2];
}

float Cfile::Getmem()
{
	return memory;
}

int Cfile::Getdata()
{
	return data;
}

int Cfile::Getkol()
{
	return kol;
}

void Cfile::Show()
{
	cout<<setw(20)<<name<<setw(20)<<memory<<setw(15)<<data<<setw(20)<<kol<<endl;
}
kol1;
cout

Последний раз редактировалось whh; 06.11.2012 в 21:48.
whh вне форума Ответить с цитированием
Старый 06.11.2012, 21:39   #10
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Блин, ну полностью всё содержимое файла *cpp со всеми подключаемыми библиотеками, заголовочными файлами, описанием структур/ классов. Я же не могу знать как у вас Cfile описан?
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив обьектов Celestia Общие вопросы Delphi 1 15.05.2012 23:48
Динамический массив, массив указателей alexalisa Паскаль, Turbo Pascal, PascalABC.NET 4 22.04.2011 21:33
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
C, динамический массив kira_truelove Помощь студентам 1 24.10.2010 18:44
Динамический массив Zhanna5006 Помощь студентам 7 10.01.2010 14:09