Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 04.08.2019
Сообщений: 81
1

Не существует подходящей функции преобразования

20.10.2019, 11:39. Показов 9236. Ответов 6
Метки нет (Все метки)

Всем привет! Не получается реализовать функцию fwrite(stud, sizeof(stud), 1, fstudDat) - ругается на название файла. Пишет ""не существует подходящей функции преобразования из "std::ofstream" в "FILE*""?
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
using namespace std;
 
struct student
{
    string surname;
    string name;
    string middlename;
    int curs = 0;
    int assessment = 0;
};
struct student1
{
    string surname;
    string name;
    string middlename;
    string floor;
    int year = 0;
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    ifstream fstud, fstud1;
    ofstream fstudDat, fstudDat1;
    
    fstud.open("stud.txt");
    fstud1.open("stud1.txt");
    fstudDat.open("fstudDat.dat", ios::binary);
    fstudDat1.open("fstudDat1.dat", ios::binary);
 
    student stud[100];
    student1 stud1[100];
    string buf[100];
    int n = 0; //n - номер строки в массиве
 
    if (fstud.is_open() == true)
    {
        cout << "Файл открыт!" << endl;
        while (!fstud.eof())//считываем данные из текстовых файлов в структуры
        {
            fstud >> stud[n].surname;
            fstud >> stud[n].name;
            fstud >> stud[n].middlename;
            fstud >> stud[n].curs;
            fstud >> stud[n].assessment;
            fstud1 >> stud1[n].surname;
            fstud1 >> stud1[n].name;
            fstud1 >> stud1[n].middlename;
            fstud1 >> stud1[n].floor;
            fstud1 >> stud1[n].year;
 
            fwrite(stud, sizeof(stud), 1, fstudDat);
            n++;
        }
        for (int i = 0; i < n; i++)
        {
            cout << stud1[i].year << endl;
        }
    }
    else
    {
        cout << "Файл не открыт!" << endl;
    }
    fstud.close();
    fstud1.close();
    fstudDat.close();
    fstudDat1.close();
    cout << endl;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2019, 11:39
Ответы с готовыми решениями:

Не существует подходящей функции для преобразования из std::string в LPCTSTR
Ошибка: не существует подходящей функции для преобразования из std::string в LPCTSTR. Как это...

Не существует подходящей функции преобразования из "std::string" в "int"
Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд...

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int"
Добрый день! Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс...

Как исправить ошибку не существует подходящей функции
Здравствуйте, я не знаю как решить эту проблему. Жалуется на PData(str,types,tmp); Подскажите...

6
Модератор
Эксперт С++
10731 / 8887 / 5368
Регистрация: 18.12.2011
Сообщений: 23,777
20.10.2019, 12:05 2
Цитата Сообщение от Ermak199 Посмотреть сообщение
fwrite(stud, sizeof(stud), 1, fstudDat);
Здесь получается, что fwrite - это функция из stdio.h.
C++
1
fsudDat.write(stud, sizeof(stud));
1
1 / 1 / 0
Регистрация: 04.08.2019
Сообщений: 81
20.10.2019, 12:12  [ТС] 3
А теперь ругается на stud - "аргумент типа student* не совместим с параметром const char*"?
0
Модератор
Эксперт С++
10731 / 8887 / 5368
Регистрация: 18.12.2011
Сообщений: 23,777
20.10.2019, 12:43 4
Неужели не можете посмотреть help по данному методу (поставить текстовый курсор на любой из символов метода и нажать F1)?
ostream& write (const char* s, streamsize n);
сразу поймете, что надо делать
C++
1
fsudDat.write((char*)stud, sizeof(stud));
НО ЭТО ВАМ НЕ ДАСТ НУЖНОГО РЕЗУЛЬТАТА!!!!!!!!!!!!!!!!
Внутри структуры есть STL контейнеры string.
А это значит, что в теле структуры хранятся только указатели на данные.
И именно они запишутся в файл.

Так что, придется каждую из string писать отдельным оператором (так же, как и читали).
1
1 / 1 / 0
Регистрация: 04.08.2019
Сообщений: 81
20.10.2019, 14:39  [ТС] 5
Спасибо большое!

Добавлено через 1 час 18 минут
Стринговские данные будут записываться так?
fstudDat.write((char*)&stud[n].surname, sizeof(stud->surname));
А как с полями типа int?

Добавлено через 36 минут
И почему он записывает помимо нужной информации еще кучу символов? Что не так? Данную тему читал в книге Герберта Шилдта
0
Модератор
Эксперт С++
10731 / 8887 / 5368
Регистрация: 18.12.2011
Сообщений: 23,777
20.10.2019, 17:23 6
Цитата Сообщение от Ermak199 Посмотреть сообщение
полями типа int?
C++
1
fstudDat.write((char*)&stud[n].curs, sizeof(int));
0
1 / 1 / 0
Регистрация: 04.08.2019
Сообщений: 81
20.10.2019, 17:33  [ТС] 7
Добавлено через 4 минуты
Вот что записывается:

`K Савин ММММММММММ (K Константин МММММ
рK Владимирович МММ ` ёK Петров МММММММММ шыJ Иван МММММММММММ 0ьJ Федорович ММММММ і hьJ Масловецкая ММММ *ьJ Екатерина ММММММ ШьJ Александровна ММ
+ эJ Матвеев ММММММММ HэJ Константин МММММ
ЂэJ Васильевич МММММ
b

Добавлено через 3 минуты
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
using namespace std;
 
struct student
{
    string surname;
    string name;
    string middlename;
    int curs = 0;
    int assessment = 0;
};
struct student1
{
    string surname;
    string name;
    string middlename;
    string floor;
    int year = 0;
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    ifstream fstud, fstud1;
    ofstream fstudDat, fstudDat1;
    
    fstud.open("stud.txt");
    fstud1.open("stud1.txt");
    fstudDat.open("fstudDat.dat", ios::binary);
    fstudDat1.open("fstudDat1.dat", ios::binary);
 
    student stud[100];
    student1 stud1[100];
    string buf[100];
    int n = 0; //n - номер строки в массиве
 
    if (fstud.is_open() == true)
    {
        cout << "Файл открыт!" << endl;
        while (!fstud.eof())//считываем данные из текстовых файлов в структуры
        {
            fstud >> stud[n].surname;
            fstud >> stud[n].name;
            fstud >> stud[n].middlename;
            fstud >> stud[n].curs;
            fstud >> stud[n].assessment;
            fstud1 >> stud1[n].surname;
            fstud1 >> stud1[n].name;
            fstud1 >> stud1[n].middlename;
            fstud1 >> stud1[n].floor;
            fstud1 >> stud1[n].year;
 
            fstudDat.write((char*)&stud[n].surname, sizeof(stud->surname));
            fstudDat.write((char*)&stud[n].name, sizeof(stud->name));
            fstudDat.write((char*)&stud[n].middlename, sizeof(stud->middlename));
            fstudDat.write((char*)&stud[n].curs, sizeof(int));
            fstudDat.write((char*)&stud[n].assessment, sizeof(stud->assessment));
    
            n++;//количество строк
        }
        for (int i = 0; i < n; i++)
        {
            cout << stud1[i].year << endl;
        }
    }
    else
    {
        cout << "Файл не открыт!" << endl;
    }
    fstud.close();
    fstud1.close();
    fstudDat.close();
    fstudDat1.close();
    cout << endl;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2019, 17:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не существует подходящей функции преобразования из "std::string" в "System::String ^"
Имею массив типа string и хочу перенести текст из него в переменную String^ для дальнейшего...

Нет подходящей функции для вызова
Добрый вечер ребята! Помогите исправить ошибку. При компиляции выскакивает ошибка &quot;error: no...

Существует ли функция преобразования числа в дату?
существует ли функция преобразования числа в дату? например если я ввел a=10; b=12; c=2014, функция...

Как установить, существует ли базис из собственных векторов матрицы линейного преобразования?
Найти-то найду, только в теории не могу додуматься как доказать его существование... Пример...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.