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

Ввод/вывод - C++

Восстановить пароль Регистрация
 
lowercase
 Аватар для lowercase
211 / 200 / 34
Регистрация: 09.05.2012
Сообщений: 494
13.02.2013, 01:49     Ввод/вывод #1
Здраствуйте. Шиворот на выворот в вузе обучение начинается на основое того чего небыло. В данном смысле имеется ввиду ооп на си++ без каких либо знаний си++.
Дали первую лабу как вступительную в си++ дабы понять как работать с вводом и выводом в си++.
Задание состоит в перегрузке функции. одна из перегруженных должна писать в текстовый файл, другая в бинарный(чтение так же). Соотвественно пишутся в файлы разные данные. Что благоприятно сказалось на использовании перегрузки.
Далее нужно считать эти файлы и делать сделать небольшую обработку данных. Короче говоря понять как работает ввод и вывод в си++
Дело собсно вот в чем: я в плюсах ноль(почти), но вот си знаю довольно таки не плохо. В итоге я едвали не вкаждой строчке выстреливаю залпом себе в обе ноги. Компилирую с помощью mingw + msys.
мой код:
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
#include <iostream>
#include <fstream>
#include <cstring>
 
#define NAME_STR_SIZE 32
#define ADDRESS_STR_SIZE 128
#define PHONE_STR_SIZE 16
#define GROUP_STR_SIZE 16
 
using namespace std;
 
typedef struct{
    char firstname[NAME_STR_SIZE];
    char lastname[NAME_STR_SIZE];
    char address[ADDRESS_STR_SIZE];
    char phone[PHONE_STR_SIZE];
} Student_B;
 
typedef struct {
    char firstname[NAME_STR_SIZE];
    char lastname[NAME_STR_SIZE];
    int sex, year;
    char group[GROUP_STR_SIZE];
} Student_T;
 
void RW(ofstream out, Student_B* s){
    out.write((char*)s, sizeof(Student_B));
}
void RW(ofstream out, Student_T* s){
    out << s->firstname << endl;
    out << s->lastname << endl;
    out << s->sex << endl;
    out << s->year << endl;
    out << s->group << endl;
}
 
void RD(ifstream in, Student_B* s){
    in.read((char*)s, sizeof(Student_B));
}
void RD(ifstream in, Student_T* s){
    in >> s->firstname;
    in >> s->lastname;
    in >> s->sex;
    in >> s->year;  
    in >> s->group;
}
 
 
void ShowStudent(Student_B* s){
    cout << "Enter first name:" << s->firstname << endl;
    cout << "Enter last name:" << s->firstname << endl;
    cout << "Enter address:" << s->address << endl;
    cout << "Enter phone:" << s->phone << endl; 
}
 
void ShowStudent(Student_T* s){
    cout << "Enter first name:" << s->firstname << endl;
    cout << "Enter last name:" << s->firstname << endl;
    cout << "Enter sex:" << s->sex << endl;
    cout << "Enter year:" << s->year << endl;
    cout << "Enter group:" << s->group << endl;
}
 
 
 
void CreateBinaryFile(ofstream out, int n){
    Student_B s;
    for(int i = 0; i < n; i++){
        cout << "Enter first name:"; cin >> s.firstname;
        cout << "Enter last name:"; cin >> s.firstname;
        cout << "Enter address:"; cin >> s.address;
        cout << "Enter phone:"; cin >> s.phone;
        RW(out, &s);
    }
}
 
void CreateTextFile(ofstream out, int n){
    Student_T s;
    for(int i = 0; i < n; i++){
        cout << "Enter first name:"; cin >> s.firstname;
        cout << "Enter last name:"; cin >> s.firstname;
        cout << "Enter sex:"; cin >> s.sex;
        cout << "Enter year:"; cin >> s.year;
        cout << "Enter group:"; cin >> s.group;
        RW(out, &s);
    }   
}
 
void ProcessBinaryFile(ifstream in, char address[ADDRESS_STR_SIZE]){
    Student_B s;
    int i = 0;
    while(!in.eof()){
        RD(in, &s);
        if(!strcmp(s.address, address)){
            cout << "Student #" << (++i) << ":" << endl;
            ShowStudent(&s);
        }
    }
}
 
 
 
int main(int argc, char** argv) {
 
    ofstream out("info.dat");
    CreateBinaryFile(out, 3);
    out.close();
    ifstream in("info.dat");
    char address[ADDRESS_STR_SIZE];
    cout << "Enter address: "; cin >> address;
    ProcessBinaryFile(in, address);
    
    cin.get();cin.get();
    return 0;
}
а вот и кровавый букет ошибок
Кликните здесь для просмотра всего текста
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/d/work/c++/oop_lab1'
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/oop_lab1.exe
make[2]: Entering directory `/d/work/c++/oop_lab1'
mkdir -p build/Debug/MinGW-Windows
rm -f build/Debug/MinGW-Windows/main.o.d
g++.exe -c -g -MMD -MP -MF build/Debug/MinGW-Windows/main.o.d -o build/Debug/MinGW-Windows/main.o main.cpp
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/ios_base.h: In copy constructor 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)':
In file included from c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/ios:45:0,
from c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/ostream:40,
from c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/iostream:40,
from main.cpp:8:
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/ios_base.h:788:5: error: 'std::ios_base::ios_base(const std::ios_base&)' is private
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/basic_ios.h:64:11: error: within this context
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/fstream: In copy constructor 'std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)':
In file included from main.cpp:9:0:
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/fstream:588:11: note: synthesized method 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' first required here
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/streambuf: In copy constructor 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)':
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/streambuf:782:7: error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const __streambuf_type&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_streambuf<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]' is private
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/fstream:69:11: error: within this context
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/fstream: In copy constructor 'std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)':
c:\qt\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/fstream:588:11: note: synthesized method 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)' first required here
main.cpp: In function 'void CreateBinaryFile(std::ofstream, int)':
main.cpp:81:13: note: synthesized method 'std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)' first required here
main.cpp:34:6: error: initializing argument 1 of 'void RW(std::ofstream, Student_B*)'
make[2]: *** [build/Debug/MinGW-Windows/main.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
make[2]: Leaving directory `/d/work/c++/oop_lab1'
make[1]: Leaving directory `/d/work/c++/oop_lab1'


BUILD FAILED (exit value 2, total time: 1s)


Помогите пожалуйста. Обьясните, что от меня хочет компилятор? Потому как все ошибки ссылаются на внешние библеотеки си++ я немогу в чем я виноват, ибо не знаю плюсоф. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
13.02.2013, 05:03     Ввод/вывод #2
Компилятор просто хочет чтобы вы ссылались на объекты istream/ostream а не копировали их при вызове функции:
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
#include <iostream>
#include <fstream>
#include <cstring>
 
#define NAME_STR_SIZE 32
#define ADDRESS_STR_SIZE 128
#define PHONE_STR_SIZE 16
#define GROUP_STR_SIZE 16
 
using namespace std;
 
typedef struct{
    char firstname[NAME_STR_SIZE];
    char lastname[NAME_STR_SIZE];
    char address[ADDRESS_STR_SIZE];
    char phone[PHONE_STR_SIZE];
} Student_B;
 
typedef struct {
    char firstname[NAME_STR_SIZE];
    char lastname[NAME_STR_SIZE];
    int sex, year;
    char group[GROUP_STR_SIZE];
} Student_T;
 
void RW(ofstream& out, Student_B* s){
    out.write((char*)s, sizeof(Student_B));
}
void RW(ofstream& out, Student_T* s){
    out << s->firstname << endl;
    out << s->lastname << endl;
    out << s->sex << endl;
    out << s->year << endl;
    out << s->group << endl;
}
 
void RD(ifstream& in, Student_B* s){
    in.read((char*)s, sizeof(Student_B));
}
void RD(ifstream& in, Student_T* s){
    in >> s->firstname;
    in >> s->lastname;
    in >> s->sex;
    in >> s->year;  
    in >> s->group;
}
 
 
void ShowStudent(Student_B* s){
    cout << "Enter first name:" << s->firstname << endl;
    cout << "Enter last name:" << s->firstname << endl;
    cout << "Enter address:" << s->address << endl;
    cout << "Enter phone:" << s->phone << endl; 
}
 
void ShowStudent(Student_T* s){
    cout << "Enter first name:" << s->firstname << endl;
    cout << "Enter last name:" << s->firstname << endl;
    cout << "Enter sex:" << s->sex << endl;
    cout << "Enter year:" << s->year << endl;
    cout << "Enter group:" << s->group << endl;
}
 
 
 
void CreateBinaryFile(ofstream& out, int n){
    Student_B s;
    for(int i = 0; i < n; i++){
        cout << "Enter first name:"; cin >> s.firstname;
        cout << "Enter last name:"; cin >> s.firstname;
        cout << "Enter address:"; cin >> s.address;
        cout << "Enter phone:"; cin >> s.phone;
        RW(out, &s);
    }
}
 
void CreateTextFile(ofstream& out, int n){
    Student_T s;
    for(int i = 0; i < n; i++){
        cout << "Enter first name:"; cin >> s.firstname;
        cout << "Enter last name:"; cin >> s.firstname;
        cout << "Enter sex:"; cin >> s.sex;
        cout << "Enter year:"; cin >> s.year;
        cout << "Enter group:"; cin >> s.group;
        RW(out, &s);
    }   
}
 
void ProcessBinaryFile(ifstream& in, char address[ADDRESS_STR_SIZE]){
    Student_B s;
    int i = 0;
    while(!in.eof()){
        RD(in, &s);
        if(!strcmp(s.address, address)){
            cout << "Student #" << (++i) << ":" << endl;
            ShowStudent(&s);
        }
    }
}
 
 
 
int main(int argc, char** argv) {
 
    ofstream out("info.dat");
    CreateBinaryFile(out, 3);
    out.close();
    ifstream in("info.dat");
    char address[ADDRESS_STR_SIZE];
    cout << "Enter address: "; cin >> address;
    ProcessBinaryFile(in, address);
    
    cin.get();cin.get();
    return 0;
}
lowercase
 Аватар для lowercase
211 / 200 / 34
Регистрация: 09.05.2012
Сообщений: 494
13.02.2013, 19:00  [ТС]     Ввод/вывод #3
знаю, например что в java и c#, переменные непримитивных типов являются ссылками на обьекты.
а в С++, как я понял, надо явно указывать, что используется ссылка на обьект, с помощью оператора & ?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
13.02.2013, 19:31     Ввод/вывод #4
Цитата Сообщение от lowercase Посмотреть сообщение
знаю, например что в java и c#, переменные непримитивных типов являются ссылками на обьекты.
а в С++, как я понял, надо явно указывать, что используется ссылка на обьект, с помощью оператора & ?
В параметрах функции - да.
lowercase
 Аватар для lowercase
211 / 200 / 34
Регистрация: 09.05.2012
Сообщений: 494
13.02.2013, 21:35  [ТС]     Ввод/вывод #5
отлично! спасибо большое!
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
13.02.2013, 22:08     Ввод/вывод #6
и без просмотра списка ошибок понятно что функция типа void в данном случае имеет мало практической пользы без аргументов переданных по ссылке или указателем.
Yandex
Объявления
13.02.2013, 22:08     Ввод/вывод
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru