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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 16:22   #11
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
typedef struct PhoneBook //опять таки что и зачем (вообще не знаю что такое typedef)
Я знаю, но смысл применённого Hemul манёвра от меня катастрофически ускользает.
typedef используется для создания синонимов имён типа:
Код:
typedef int HitPoints; //Далее в программе есть псевдотип HitPoints, который "на самом деле" int

typedef std::vector<int>::iterator Iter; //Далее везде вместо крокодила std::vector<int>::iterator можно писать просто Iter

typedef struct Name1 {/*...*/} Name2; //Теперь к структуре можно обращаться как по имени Name1, так и по имени Name2
В случае C (не C++!) последний пример чуть меняется: к структуре нельзя обращаться просто по имени Name1, а только и исключительно struct Name1. Поэтому зачастую создают безымянную структуру (имя ей назначает компилятор) с синонимом имени:
Код:
typedef struct {
  /*...*/
} MyStruct; //Теперь к объявленной структуре можно обращаться по имени MyStruct
Вариант Hemul же, если я правильно понимаю произошедшее, сопоставил PhoneBook как синоним пустого имени типа и объявил структуру с именем struct PhoneBook, задав ей пустой синоним. Повторюсь, смысл этого действия лично мне не ясен.
Abstraction вне форума Ответить с цитированием
Старый 29.04.2013, 17:40   #12
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

тогда ждемс ответа Hemul
п.с. ошибки так или иначе еще остались (в предыдущем посте)
NewLamer&Programer вне форума Ответить с цитированием
Старый 29.04.2013, 17:55   #13
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

...
В процессе поиска ошибки полез не в ту степь, и добавил еще и typedef (Однако MinGW с .c файлом это удачно скомпилил) . Извиняюсь, мой косяк, исправил пост.

Последний раз редактировалось Hemul; 29.04.2013 в 18:03.
Hemul вне форума Ответить с цитированием
Старый 29.04.2013, 18:16   #14
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Hemul Посмотреть сообщение
...
В процессе поиска ошибки полез не в ту степь, и добавил еще и typedef (Однако MinGW с .c файлом это удачно скомпилил) . Извиняюсь, мой косяк, исправил пост.
даже так ошибок куча

1>Add, Delete, Change.obj : error LNK2005: _main уже определен в Main.obj
1>Add, Delete, Change.obj : error LNK2005: "struct PhoneBook * PB" (?PB@@3PAUPhoneBook@@A) уже определен в Main.obj
1>Add, Delete, Change.obj : error LNK2005: "char const * const FileName" (?FileName@@3PBDB) уже определен в Main.obj
1>Save-Load.obj : error LNK2005: _main уже определен в Main.obj
1>Save-Load.obj : error LNK2005: "struct PhoneBook * PB" (?PB@@3PAUPhoneBook@@A) уже определен в Main.obj
1>Save-Load.obj : error LNK2005: "char const * const FileName" (?FileName@@3PBDB) уже определен в Main.obj
1>Search, Filtering.obj : error LNK2005: _main уже определен в Main.obj
1>Search, Filtering.obj : error LNK2005: "struct PhoneBook * PB" (?PB@@3PAUPhoneBook@@A) уже определен в Main.obj
1>Search, Filtering.obj : error LNK2005: "char const * const FileName" (?FileName@@3PBDB) уже определен в Main.obj
1>D:\институт\программирование\Курс овая работа за 1 курс 2 семестр\KR_2S\Debug\KR_2S.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
NewLamer&Programer вне форума Ответить с цитированием
Старый 29.04.2013, 18:27   #15
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Судя по ошибкам, у вас в файлах Change, Save-Load, Filtering идет конфликт с теми объявлениями, что написаны в Main. Пересмотрите еще раз все свои исходные файлы на предмет переобъявления одних и тех же функций и переменных
Hemul вне форума Ответить с цитированием
Старый 29.04.2013, 18:35   #16
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

да они даже еще не написаны толком... так только заготовки пока...

Search, Filtering.cpp
Код:
#include <stdio.h>
#include <conio.h>
#include "Main.cpp"

#define _CRT_SECURE_NO_WARNINGS

void Search()
{
}

void Filtering()
{
}
Add, Delete, Change.cpp
Код:
#include <stdio.h>
#include <conio.h>
#include "Main.cpp"

#define _CRT_SECURE_NO_WARNINGS

void Add()
{
}

void Delete(int N)
{
}

void Change(int N)
{
}
Save-Load.cpp
Код:
#include <stdio.h>
#include <conio.h>
#include "Main.cpp"

#define _CRT_SECURE_NO_WARNINGS

void Save()
{
	FILE *fp;
	int i;

	fp = fopen(FileName,"w");
	for (i = 0; i < COUNT; i++)
	{
		fwrite(PB[i].N, sizeof(char), 1, fp);
		fwrite(PB[i].Family, sizeof(char), 1, fp);
		fwrite(PB[i].Name, sizeof(char), 1, fp);
		fwrite(PB[i].Patronymic, sizeof(char), 1, fp);
		fwrite(PB[i].Phone.Home, sizeof(char), 1, fp);
		fwrite(PB[i].Phone.Work, sizeof(char), 1, fp);
		fwrite(PB[i].Phone.Mobile, sizeof(char), 1, fp);
		fwrite(PB[i].Address.Country, sizeof(char), 1, fp);
		fwrite(PB[i].Address.City, sizeof(char), 1, fp);
		fwrite(PB[i].Address.Street, sizeof(char), 1, fp);
		fwrite(PB[i].Address.N_Home, sizeof(char), 1, fp);
		fwrite(PB[i].Address.N_Apartment, sizeof(char), 1, fp);
		fwrite(PB[i].Email, sizeof(char), 1, fp);
	}
	fclose(fp);

}

void Load()
{
	FILE *fp;
	int i;

	fp = fopen(FileName,"r");
	for (i = 0; i < COUNT; i++)
	{
		fread(PB[i].N, sizeof(char), 1, fp);
		fread(PB[i].Family, sizeof(char), 1, fp);
		fread(PB[i].Name, sizeof(char), 1, fp);
		fread(PB[i].Patronymic, sizeof(char), 1, fp);
		fread(PB[i].Phone.Home, sizeof(char), 1, fp);
		fread(PB[i].Phone.Work, sizeof(char), 1, fp);
		fread(PB[i].Phone.Mobile, sizeof(char), 1, fp);
		fread(PB[i].Address.Country, sizeof(char), 1, fp);
		fread(PB[i].Address.City, sizeof(char), 1, fp);
		fread(PB[i].Address.Street, sizeof(char), 1, fp);
		fread(PB[i].Address.N_Home, sizeof(char), 1, fp);
		fread(PB[i].Address.N_Apartment, sizeof(char), 1, fp);
		fread(PB[i].Email, sizeof(char), 1, fp);
	}
	fclose(fp);

}
Functions.h
Код:
void Save();
void Load();
void Add();
void Delete(int N);
void Change(int N);
void Search();
void Filtering();
main.cpp
Код:
#include <stdio.h>
#include <conio.h>
#include <locale>
#include "Functions.h"

#define _CRT_SECURE_NO_WARNINGS
#define COUNT 1000
#define FileName  "PhoneBook.txt"

struct PhoneBook
{
	char N[100];
	char Family[100];
	char Name[100];
	char Patronymic[100];
	struct TPhone
	{
		char Home[100];
		char Work[100];
		char Mobile[100];
	} Phone;
	struct TAddress
	{
		char Country[100];
		char City[100];
		char Street[100];
		char N_Home[100];
		char N_Apartment[100];
	} Address;
	char Email[100];
} PB[COUNT];

const char header[] =
"|---------------------------------------------------------------------------------------------------------------|\n"
"|	   |              |              |                    |     Phone     |     Address          |               |\n"
"|  №  |    Family    |     Name     |     Patronymic     |---------------|----------------------|     Email     |\n"
"|	   |              |              |                    |     Home      |     Country          |               |\n"
"|	   |              |              |                    |     Work      |     City             |               |\n"
"|	   |              |              |                    |     Mobile    |     Street           |               |\n"
"|	   |              |              |                    |               |     № Home           |               |\n"
"|	   |              |              |                    |               |     № Apartament     |               |\n"
"|---------------------------------------------------------------------------------------------------------------|\n";

void main()
{
	setlocale(LC_ALL, "RUSSIAN");
	getch();
}
NewLamer&Programer вне форума Ответить с цитированием
Старый 29.04.2013, 18:53   #17
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Ты во все файлы включаешь Main.cpp в котором есть функция main. Получается во время подстановки несколько функций main.
Вообще принято распологать в h файлах объявления, а в с - реализацию.
Создай файл PhoneBook.h - там расположи структуру.

Код:
#ifndef PHONEBOOK_H
#define PHONEBOOK_H
#define COUNT 100
#define FileName "file.txt"

struct PhoneBook
{
	char N[100];
	char Family[100];
	char Name[100];
	char Patronymic[100];
	struct TPhone
	{
		char Home[100];
		char Work[100];
		char Mobile[100];
	} Phone;
	struct TAddress
	{
		char Country[100];
		char City[100];
		char Street[100];
		char N_Home[100];
		char N_Apartment[100];
	} Address;
	char Email[100];
} PB[COUNT];
#endif
Затем Functions.h такого вида :

Код:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include "PhoneBook.h"
#include <stdio.h>
#include <conio.h>
#define _CRT_SECURE_NO_WARNINGS

void Save();
void Load();
void Add();
void Delete(int N);
void Change(int N);
void Search();
void Filtering();
#endif
Затем по твоему желанию : либо все функции реализовать в одном файле
Functions.cpp :
Код:
#include "Functions.h"
void Save(){
}
...
Либо для каждой по отдельности. Обрати внимание, что нужно включать Functions.h

И в конце пишешь main функцию

Код:
#include "Functions.h"
void main()
{
	setlocale(LC_ALL, "RUSSIAN");
	getch();
}

Стукрутра
#ifndef MACROSS - если не объявлен макрос MACROSS войти в блок
#define MACROSS - объявить макрос

#endif - конец блока.
Это директивы препроцессора и выполняются на этапе компиляции. Это дает при любом количестве подключений файла только одно его фактическое включение

Последний раз редактировалось Hemul; 29.04.2013 в 19:53.
Hemul вне форума Ответить с цитированием
Старый 29.04.2013, 19:38   #18
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

вообще бред получился -_-

во первых может в модулях функций подключать не Functions.h, а все таки PhoneBook.h?
во вторых дефайн count объявлен в майне, может стоит перенести к структуре?
да и FileName тоже в майне кстати объявлен...
ну и короче остальное смотрите в ошибках
Вложения
Тип файла: txt Ошибки.txt (13.1 Кб, 116 просмотров)
NewLamer&Programer вне форума Ответить с цитированием
Старый 29.04.2013, 19:58   #19
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Я постарался отобразить только структуру файлов и что в них должно быть.

СМ приложение
Вложения
Тип файла: rar src.rar (1.1 Кб, 7 просмотров)

Последний раз редактировалось Hemul; 29.04.2013 в 20:01.
Hemul вне форума Ответить с цитированием
Старый 29.04.2013, 20:14   #20
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

уже лучше, говорит
error C2065: COUNT: необъявленный идентификатор
error C2065: FileName: необъявленный идентификатор
NewLamer&Programer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение многомерного массива в файл Agrahil Общие вопросы Delphi 7 10.12.2011 13:55
сохранение массива float в файл alvahtin Общие вопросы C/C++ 1 11.10.2011 12:55
Сохранение массива в файл Дмитрий Стариков Общие вопросы Delphi 7 26.09.2010 19:51
Сохранение двумерного массива в файл AngelOfDeath Общие вопросы Delphi 5 04.10.2008 09:37
Сохранение массива в файл Artem Общие вопросы Delphi 10 11.12.2007 20:00