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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.82
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
#1

Про функции и файлы - C++

23.08.2009, 16:34. Просмотров 6262. Ответов 50
Метки нет (Все метки)

Вобщем начал изучать С++ добрался до файлов задумал написать примитивный справочник телефонный с возможностью сохранения чтения и поиска в файле но это потом застопорился на вот таком моменте:
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
void save(ofstream f, char *n,char *i);
 
int main(){
 
    char s;
    char nom[31],im[31];
    char fn[81];
 
    cout << "\nVvedite file dlia sohranenia:\n";
    cin.getline(fn, 80);
 
    ofstream f(fn);
 
    if (!f) {
    cout << "File" << fn << "ne mojet bit otkrit";
    return -1;
    }
 
    while(1){
        cout << "\n Vvedite nomer: \n";
        cin.getline(nom,30);
        cout << "Vvedite Imia: \n";
        cin.getline(im,30);
        cout << "Sohranit v file? (y/n) \n";
        cin >> s;
        if (s=='y') save(f,nom,im);
        cout << "Prodoljit? (y/n)";
        cin >> s;
        if (s=='n') break;
    }
    return 0;
}
 
void save(ofstream f, char *n,char *i){
f << n << endl;
f << i << endl;
}
Выдает следующее...

------ Построение начато: проект: 1, Конфигурация: Debug Win32 ------
Компиляция...
main.cpp
c:\program files\microsoft visual studio 9.0\vc\include\fstream(803) : error C2248: std::basic_ios<_Elem,_Traits>::basic_ios: невозможно обратиться к private член, объявленному в классе "std::basic_ios<_Elem,_Traits>"
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
c:\program files\microsoft visual studio 9.0\vc\include\ios(151): см. объявление 'std::basic_ios<_Elem,_Traits>::basic_ios'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
Сообщение диагностики возникло в созданной компилятором функции "std::basic_ofstream<_Elem,_Traits>::basic_ofstream(const std::basic_ofstream<_Elem,_Traits> &)"
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\Cons\1\1\Debug\BuildLog.htm"
1 - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Думаю проблема в неправильной передаче аргументов в функцию но в чем она заключается не знаюю подскажите пожалуйсто.

Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2009, 16:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Про функции и файлы (C++):

Вопрос про файлы - C++
где распологать текстовый файл, чтобы программа видела его сразу без прописания директории? пишу в VS

Про файлы .dll - C++
Здравствуйте, я заинтересовался фалами .dll. Я заметил, что в некоторых приложениях скачивают эти файлы(обычно названиеx64.dll и...

про раздельную компиляцию и заголовочные файлы - C++
Люди, кто-нибудь может просто и понятно объяснить мне про раздельную компиляцию и заголовочные файлы, плз!!!!

не могли бы вы проверить задачу про двоичные файлы? - C++
Всем здравствуйте. наверно немного странная просьба: проверьте на правильность задачку &quot;вывод числа из двоичного файла&quot;, просто сомневаюсь...

Задача про ГАИ и файлы (где накосячил в коде?) - C++
Добрый день! Задача звучит так: Вдоль шоссе в точках X1,X2,...,XN расположены посты ГАИ. В точке X произошло мелкое ДТП...

Еще раз про setw: не определяется, хотя все файлы импортированы - C++
скрины как решилась проблема.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.08.2009, 16:50 #2
Надо какбэ по ссылке передавать файл.
C++
1
void save(ofstream &f, char *n,char *i);
C++
1
2
3
4
5
void save(ofstream &f, char *n,char *i)
{
    f << n << endl;
    f << i << endl;
}
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
23.08.2009, 16:51  [ТС] #3
А какая разница то между ссылкой и указателем?
ссылка тот же указатель только адрес менять нельзя
или не так?

Действительно с ссылкой работает нопочему не понятно объясните пожалуйсто
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2009, 17:32 #4
Цитата Сообщение от Neo-n06 Посмотреть сообщение
А какая разница то между ссылкой и указателем?
ссылка тот же указатель только адрес менять нельзя
или не так?

Действительно с ссылкой работает нопочему не понятно объясните пожалуйсто
с указателем тоже будет работать, но где у вас указатель? то что у вас называется "передача по значению"
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
23.08.2009, 17:39 #5
Цитата Сообщение от Neo-n06 Посмотреть сообщение
А какая разница то между ссылкой и указателем?
Грубо, ссылка - суть синоним, указатель - суть адрес.
К ссылке операция разыменовывания применяется "автоматически", а к указателю надо приписывать *.
f у Вас является потоком, а все операции с потоком его меняют, следовательно его надо передавать по ссылке.
Все стандартные функции работающие с файлами в заголовках имеют "ссылку" на передаваемый им файл.

Посмотрите в книжке, наверняка есть отдельное замечание об их разнице.
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
23.08.2009, 18:18  [ТС] #6
А книжку не посоветуете где про это поподробнее написано?

Впринципе суть понял ссылка нужна чтобы менялся именно тот самый поток а если передаем адрес потока то впоследствии он изменится в независимости от потока так?

С указателями не работает.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
23.08.2009, 18:48 #7
Цитата Сообщение от Neo-n06 Посмотреть сообщение
А книжку не посоветуете где про это поподробнее написано?
Сори, не могу. Я пользую справочник Дерка Луиса, но книжке 12 лет, и к тому же это голый справочник - в нём не разобраться без хорошего понимания языка.
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
23.08.2009, 18:58  [ТС] #8
Вот еще вопрос почему программа не заходит 2 й раз на cin.getline(nom,30);
Вот скриншот:

[IMG]http://i002.***********/0908/00/3164bb5770d2.jpg[/IMG]
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2009, 19:29 #9
Цитата Сообщение от Neo-n06 Посмотреть сообщение
С указателями не работает.
нет работает!
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
23.08.2009, 19:34 #10
Таки новую версию покажите, а то с ясновидцами туго
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
23.08.2009, 19:38  [ТС] #11
=))

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
#include <iostream>
#include <fstream>
 
using namespace std;
 
void save(fstream &f, char *n,char *i);
 
int main(){
 
    char s;
    char nom[31],im[31];
    char fn[81];
 
    
    cout << "\nVvedite file dlia sohranenia:\n";
    cin.getline(fn, 80);
 
    fstream f(fn);
 
    if (!f) {
    cout << "File" << fn << "ne mojet bit otkrit";
    return -1;
    }
 
    while(1){
        cout << "Vvedite nomer: \n";
        cin.getline(nom,30);
        cout << "Vvedite Imia: \n";
        cin.getline(im,30);
        cout << "Sohranit v file? (y/n) \n";
        cin >> s;
        if (s=='y') save(f,nom,im);
        cout << "Prodoljit? (y/n)";
        cin >> s;
        if (s=='n') break;
    }
    return 0;
}
 
void save(fstream &f, char *n,char *i){
f << n << endl;
f << i << endl;
}

Напишите пожалуйсто как должно быть с указателями
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
23.08.2009, 20:58 #12
C++
1
2
3
4
  void save(fstream *f, char *n,char *i){
*f << n << endl;
*f << i << endl;
}
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
23.08.2009, 23:16  [ТС] #13
Цитата Сообщение от Фенрир Посмотреть сообщение
C++
1
2
3
4
  void save(fstream *f, char *n,char *i){
*f << n << endl;
*f << i << endl;
}
вот что получаем в ответ

-- Построение начато: проект: 1, Конфигурация: Debug Win32 ------
Компиляция...
main.cpp
c:\documents and settings\admin\мои документы\visual studio 2008\projects\cons\1\1\main.cpp(32) : error C2664: save: невозможно преобразовать параметр 1 из 'std::fstream' в 'std::fstream *'
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\Cons\1\1\Debug\BuildLog.htm"
1 - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2009, 23:20 #14
Цитата Сообщение от Neo-n06 Посмотреть сообщение
вот что получаем в ответ

-- Построение начато: проект: 1, Конфигурация: Debug Win32 ------
Компиляция...
main.cpp
c:\documents and settings\admin\мои документы\visual studio 2008\projects\cons\1\1\main.cpp(32) : error C2664: save: невозможно преобразовать параметр 1 из 'std::fstream' в 'std::fstream *'
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\Cons\1\1\Debug\BuildLog.htm"
1 - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
ну так и передайте ему адрес, а не стрим:

save(&f,nom,im);
Neo-n06
22 / 3 / 1
Регистрация: 21.06.2009
Сообщений: 38
23.08.2009, 23:46  [ТС] #15
Да вы правы ступил я спасибо...

А по поводу того что во второй раз не дает вводить номер что скажите?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2009, 23:46
Привет! Вот еще темы с ответами:

Задача про массивы и функции - C++
Напишите программу, которая запрашивает у пользователя 10 результатов игры в гольф, сохраняя их в массиве. При этом необходимо обеспечить...

strcmp в функции ...(про поезда) - C++
Вывод на экран поездов отправляющихся после введённого с клавиатуры времени... Сообственно подводит if в 94 строке который выводит не...

Вопрос про аргументы функции - C++
Если функция не принимает никаких значений можно ли писать так? int GetAge(void) {return age;} я про void в скобках

Про указатели с использованием функции - C++
Вопросы в комментариях к коду #include &lt;iostream&gt; #include &lt;cctype&gt; #include &lt;cstring&gt; using namespace std; void...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.08.2009, 23:46
Ответ Создать тему
Опции темы

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