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

Потоковый ввод из файла вместе с классом. Не пойму в чем причина - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Переделать программу что бы была через map http://www.cyberforum.ru/cpp-beginners/thread1086119.html
#include <iostream> #include <conio.h> #include <windows.h> #include <vector> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); struct zap
C++ Как определить строковую переменную? Првиет всем! Ситуация такая.Мне нужно что бы введенная строка загрузилась в переменную.А далее эта переменная была переданна в качестве аргумента функции.Примерно так. std::cin>>stroka FILE *L = fopen (stroka ,"r"); \\ тут строка это путь к TXT файлу.Который мы открываем с "r" (Аргумент или т.д) http://www.cyberforum.ru/cpp-beginners/thread1086111.html
C++ string[] в char[][] или char[]
Приветствую! Можно ли одномерный массив типа string переписать в двумерный или одномерный типа char? Если да, то как? Заранее спасибо :thank_you:
C++ Сделать через map
#include <iostream> #include <conio.h> #include <windows.h> #include <vector> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); struct zap
C++ Компиляция библиотеки libxml под c++ http://www.cyberforum.ru/cpp-beginners/thread1086074.html
Под libxml есть библиотека xmlwrapp позволяющая работать с libxml под с++. Проблема в ее компиляции: по адресуhttp://libxmlplusplus.sourceforge.net/скачал исходники и с помощью msbuild собрал через master.proj либы, подключил к своему проекту, но он ругается на "undefined reference" вызываемых функций. Подключил вроде правильно (работаю под qt, но думаю это не имеет значения), сами libxml...
C++ Зависимость от динамических библиотек Как определить от каких дин. библиотек зависит приложение, в Linux ldd в Windows есть что то подобное? подробнее

Показать сообщение отдельно
Nozi
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 5
31.01.2014, 14:27  [ТС]     Потоковый ввод из файла вместе с классом. Не пойму в чем причина
palva, надо было закинуть все, согласен


Man.h
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
#pragma once
 
 
class Man
{
public:
    Man (char*,float,bool,int,int l_name=30);
    void name(int , char*,int&);
    char* get_name(int&);
    void metr(float);
    float get_metr();
    void snic(int);
    int get_snic();
    void sLife(bool);
    bool get_sLife();
    void save(int&);
    
    
 
    ~Man()
        { delete [] pName; }// деструктор
private:
    
    char* pName;
    float   diam;
    int sput;
    bool life;
 
 
};
Man.cpp

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
#include "Man.h"
#include <fstream>
 
 
char kolN[30][30];
int i=0;
 
Man::Man(char* pName, float diam, bool life, int sput,int l_name)
{
    Man::name(l_name,pName,i);
    Man::metr(diam);
    Man::sLife(life);
    Man::snic(sput);
}
 
void Man::name(int l_name, char* newName,int& i) 
{
    
    
    pName = new char[l_name];
    pName=newName;
    
    strcpy(kolN[i],pName);
}
 
char* Man::get_name(int &i)
{
    return kolN[i];
}
 
void Man::metr(float newDm)
{
    Man::diam=newDm;
}
 
float Man::get_metr()
{
    return Man::diam;
}
 
void Man::sLife(bool lifeS)
{
    Man::life=lifeS;
}
 
bool Man::get_sLife()
{
    return Man::life;
}
 
void Man::snic(int snicT)
{
    Man::sput=snicT;
}
 
int Man::get_snic()
{
    return Man::sput;
}
 
void Man::save(int& i)
{
    std::ofstream saveS("planetaS.txt",std::ios::app);
 
    saveS<<Man::get_name(i)<<"  "
        <<Man::get_metr()<<"  "
        <<Man::get_sLife()<<"  "
        <<Man::get_snic()<<std::endl;
 
    saveS.close();
}
и class.cpp

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
#include<fstream>
#include <iomanip>
#include "Man.h"
using namespace std;
 
 
int  menu()
{
    int a;
    cout<<"Выберите один из пунктов"<<endl
        <<"1)  Чтение БД 'Солнечная система' из файла"<<endl
        <<"2)  Запись БД 'Солнечная система' в файл"<<endl
        <<"3)  Сортировка БД"<<endl
        <<"4)  Редактировать БД 'Солнечная система'"<<endl
        <<"5)  Вывод БД на экран"<<endl
        <<"6) Выход!"<<endl;
    cin>>a;
    return a;
}
 
 
int read(char* file_name, Man planets[], char* pName,float diam,bool life, int sput, int l_name, int& kol_planet)
{   
    ifstream plan(file_name);
    
    while (plan)
    {
        
        plan>>pName;
            planets[kol_planet].name(l_name,pName,kol_planet);
        plan>>diam;
            planets[kol_planet].metr(diam);
        plan>>life;
            planets[kol_planet].sLife(life);
        plan>>sput;
            planets[kol_planet].snic(sput);
        kol_planet++;
        
    }
    
    cout<<endl<<"Прочитано!"<<endl;
    return kol_planet;
}
 
void write(char* file_name,Man planets[], int &kol_planet)
{
    int& i= kol_planet;
    for (int j=0;j<i;j++)
    {
        planets[j].save(j);
    }
 
    
    cout<<"БД обновлена!"<<endl;
}
 
void sort(Man planets[],int &kol_planet)
{
     int& i= kol_planet;
    for (int j=0;j<i;j++)
    {
        for (int q=0;q<i;q++)
        {
            if  (strcmp(planets[j].get_name(q),planets[q].get_name(q))>0) //сравниваю строки
            {
                swap(planets[j],planets[j+1]); //меняю местами в порядке возрастания
            }
        }
    }
}
 
int redakt(Man planets[],int &kol_planet, char* pName,float diam,bool life, int sput, int l_name )
{
 
 
    int k;
    char* name;
    name = new char [30];
    cout<<"Удалить запись [1] / Добавить запись [2] "<<endl;
    cin>>k;
 
    switch (k)
    {
    case 1:
        {
            cout<<"Введите название планеты"<<endl;
            cin>>name;
            for (int i=0;i<kol_planet;i++)
            {
                if (strcmp(name,planets[i].get_name(i))==0)
                {
                    
                        planets[i].get_name(i)=='\0';
                        planets[i].get_metr()=='\0';
                        planets[i].get_sLife()=='\0';
                        planets[i].get_snic()=='\0';
                    
                }
            }
            cout<<"Запись удалена!"<<endl;
        }
 
    case 2:
        {
            cout<<"Введите название планеты"<<endl;
            cin>>pName;
            planets[kol_planet].name(l_name,pName,kol_planet);
            cout<<"Ввеедите диаметр планеты"<<endl;
            cin>>diam;
            planets[kol_planet].metr(diam);
            cout<<"Существует ли на ней жизнь? Введите false/true"<<endl;
            cin>>life;
            planets[kol_planet].sLife(life);
            cout<<"Введите количество спутников"<<endl;
            cin>>sput;
            planets[kol_planet].snic(sput);
            cout<<"Планета добавлена в БД!"<<endl;
            kol_planet++;
        }
    }
    return kol_planet;
}
 
void outp(Man planets[],int &kol_planet)
{
    for (int i=0;i<kol_planet;i++)
    {
        cout<<endl;
            cout<<planets[i].get_name(i)<<"  ";
            cout<<planets[i].get_metr()<<"  ";
            cout<<planets[i].get_sLife()<<"  ";
            cout<<planets[i].get_snic()<<"  ";
    }
    cout<<endl;
}
 
 
 
 
 
 
 
 
int l_name=30;
const int Size = 10;
const int l_record = 80; 
char* pName=new char [l_name];
float   diam;
int sput;
bool life;
 
Man *planets=new Man(pName,diam,life,sput,l_name);
 
 
 
int main() 
{
    setlocale(0,"rus");
char *file_name = "planeta.txt";
int l;
int kol_planet=0;
 
while (true)
     { l=menu();
    switch (l) 
    {
    case 1:kol_planet=read(file_name,planets,pName,diam,life,sput,l_name,kol_planet);
            break; 
    case 2: write(file_name,planets,kol_planet); break;
    case 3: sort(planets,kol_planet); break;
    case 4: redakt(planets,kol_planet,pName,diam,life,sput,l_name); break; 
    case 5: outp(planets,kol_planet); break;
    case 6: return 0;
    default: cout<<" Неправильный ввод"<<endl; break;
    }
 }
system ("pause");
return 0;
}
Часть где удаление записей прошу не смотреть, еще разберусь как это сделать)
Да я создаю для одной планеты, но названия записываю в двумерный массив kolN. Если вводить данные с клавиатуры, то у меня сохраняются все записи для каждой планеты, а с файла вытащить не получается(
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru