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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 21:23   #1
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию Шаблоны list std

Доброго времени суток! Есть вопрос. Не получается заносить в контейнер елемент класса File. Буду благодарен за помощь.
Код:
#include "file.h"
void main(){
FILE *csv;
int i=0,j=0,k=0;
char *csv_name="for_lab.csv";
char *tmp,*tmp1="",*tmp2="";
list <File> head;

if( (csv=fopen(csv_name,"rt")) == 0 ) { 
      printf("Error reading file...");
    }

tmp=(char*)malloc(256*sizeof(char));
/*while(*/fscanf(csv,"%s",tmp);//!=EOF){
i=0; j=0; k=0;
File tp;

while(tmp[i]!=';')
	i++;
tmp1=new char[i];
strncpy(tmp1,tmp,i);
tmp1[i]=NULL;

i++;

j=i;

while(tmp[j]!=';')
	j++;

tmp2=new char[j-i];

for(k=i;k<j;k++) tmp2[k-i]=tmp[k];

tmp2[j-i]=NULL;

i=atoi(tmp2);
++j;
tp.SetDetails(tmp1,i);

tmp1=new char[strlen(tmp)-j];
for(k=j;k<strlen(tmp);k++) tmp1[k-j]=tmp[k];

tmp1[k-j]=NULL;

tp.SetKeywords(tmp1);
tp.Print();

head.push_back(tp);
//}
fclose(csv);
}
У меня есть подозрения что я что-то упустил... Может память выделять под елементы списка нужно или еще что-то...
Gausse вне форума Ответить с цитированием
Старый 02.06.2011, 22:16   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Какие проблемы? Ошибки, или что там у вас?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 02.06.2011, 22:18   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а чем не угодил fstream?
а какие ошибки то пишет?
и кстати, я так полагаю, File это ваш личный класс?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.06.2011, 22:31   #4
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

да File это мой личный класс. Проблема в том что ошибки не выдает, она на моменте добаления элеманта в список виснет и предлогает закрыть программу.
Gausse вне форума Ответить с цитированием
Старый 02.06.2011, 22:33   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Зрители требуют file.h и file.cpp (если таковой имеется)!
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 02.06.2011, 22:38   #6
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

file.h
Код:
/*!
 * file: File.h
 * File class declaration
 * written: 01/05/2011
 * Copyright (c) 2011 by Yu.Zorin
 */
#include <string.h>
#include <stdio.h>
#include <list>
#include <stdlib.h>
#pragma once
using namespace std;

class File{
public:
	File();//+
	File(const File &);//+
	~File();//+
	void SetDetails(const char *t1, int t2);//+
	void SetKeywords(const char*temp);//+
	File & operator=(const File &temp);//+
	bool operator<(const File &temp)const;//+
	int GetSize()const;//+
	void SetSize( int );//+
	void Print()const;//+

private:
	char *name;//file name
	int size;//file length
	char *keywords;//set of keywords
	int keywords_nmb;//keywords number
};
struct cnode{

File element;
struct cnode *next;
struct cnode *prev;

void operator=(const cnode &list);
};

/*void ListAll( const container_type<File> &);
void AddKeyword(container_type <File> &, char *);
void DelKeyword(container_type <File> &, char *kwrd);
void DelKeywordByLen(container_type <File> &, int len);
void SortBySize(container_type <File> &);
void SortByKeywordsNumber(container_type <File> &);*/
methods.cpp
Код:
#include "file.h"
//Конструктор
File::File(){
		name=NULL;
		size=0;
		keywords=NULL;
		keywords_nmb=0;
		printf("Constructor N1 works correctly\n");
}
//Конуструктор копирования
File::File(const File &temp){
	strcpy(name,temp.name);
	size=temp.size;
	strcpy(keywords,temp.keywords);
	keywords_nmb=temp.keywords_nmb;
	printf("Constructor N2 works correctly\n");
}
//Дестркутор
File::~File(){
	delete name;
	size=0;
	delete keywords;
	keywords_nmb=0;
	printf("Destructor works correctly\n");
}
//Инициализирует поля name и size
void File::SetDetails(const char *t1, int t2){
	name=new char [t2+1];
	strcpy(name,t1);
	name[t2]=NULL;
	size=t2;
}
//Инициализирует поле keywords и подсчитывает число ключевых слов keywords_nmb.
void File::SetKeywords(const char*temp){
int len=strlen(temp);
	keywords=new char[len+1];
	strcpy(keywords,temp);
	keywords[len]=NULL;
	for(int i=0;i<len;i++)
	{if (keywords[i]==';')	keywords_nmb++;}keywords_nmb++;
}
//Перегрузка оператора
File & File::operator=(const File &temp){
	delete name;
	strcpy(name,temp.name);
	size=temp.size;
	strcpy(keywords,temp.keywords);
	keywords_nmb=temp.keywords_nmb;
	
	return *this;
}
//Оператор сравнения
bool File::operator<(const File &temp)const{
	if (size<temp.size) return true;
	else return false;
}
//Возвращает длину файла
int File::GetSize()const{
	return size;
}
//Меняет размер файла
void File::SetSize( int tmp){
	size=tmp;
}
//Выводит структуру на екран
void File::Print()const{
	printf("Name=%s\n",name);
	printf("Size=%d\n",size);
	printf("Keywords=%s\n",keywords);
	printf("Number of keywords=%d\n",keywords_nmb);
}
void cnode::operator=(const cnode &list){
	next=NULL;
	prev=NULL;
	next=list.next;
	prev=list.prev;
	element=list.element;

	return;


}
Gausse вне форума Ответить с цитированием
Старый 03.06.2011, 14:44   #7
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

Во время дебага выдает такую ошибку.

Необработанное исключение в "0x67acf689 (msvcr90d.dll)" в "s2l6.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
Gausse вне форума Ответить с цитированием
Старый 03.06.2011, 14:52   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Gausse
Код:

private:
	char *name;//file name
	int size;//file length
	char *keywords;//set of keywords
	int keywords_nmb;//keywords number
Код:
//Конуструктор копирования
File::File(const File &temp){
	strcpy(name,temp.name);
	size=temp.size;
	strcpy(keywords,temp.keywords);
	keywords_nmb=temp.keywords_nmb;
	printf("Constructor N2 works correctly\n");
}
вопросы?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 03.06.2011 в 14:55.
pproger вне форума Ответить с цитированием
Старый 04.06.2011, 08:17   #9
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

огромное спасибо) так оно и есть.... затупил)
Gausse вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c++][list] Порядок обработки двух list Padavan Помощь студентам 1 10.05.2011 14:56
E2015 Ambiguity between 'std::log(double)' and 'std::log(long double)' Namolem Помощь студентам 3 02.04.2011 20:22
Относительно STD Evgenii90 Visual C++ 3 21.10.2010 20:25
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38
std Викдон Общие вопросы C/C++ 3 17.02.2009 11:33