Проблема с getline()
От: VeryEasyLogin  
Дата: 09.12.11 09:58
Оценка:
Мне в программке нужна была функция, считывающая строки из файла. Написал код:

void getVector(ifstream f, vector<string> vec){
    string s;
    while(getline(f, s))
        vec.push_back(s);
}

Ругается на getline, а именно:
1>c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\fstream(890): error C2248: std::basic_ios<_Elem,_Traits>::basic_ios: невозможно обратиться к private член, объявленному в классе "std::basic_ios<_Elem,_Traits>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ios(176): см. объявление "std::basic_ios<_Elem,_Traits>::basic_ios"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> Сообщение диагностики возникло в созданной компилятором функции "std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]

Копался в гугле, смотрел форумы — ответа не нашёл. Пробовал ставить ссылки — тоже не помогло.
visual studio c++
Re: Проблема с getline()
От: pvirk Россия  
Дата: 09.12.11 10:44
Оценка:
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>Мне в программке нужна была функция, считывающая строки из файла. Написал код:


VEL>
VEL>void getVector(ifstream f, vector<string> vec){
VEL>    string s;
VEL>    while(getline(f, s))
VEL>        vec.push_back(s);
VEL>}
VEL>


А если пеердавать ifstream не по значению, а по ссылке или указателю: ifstream& f?
Re[2]: Проблема с getline()
От: pvirk Россия  
Дата: 09.12.11 10:46
Оценка:
Здравствуйте, pvirk, Вы писали:

P>Здравствуйте, VeryEasyLogin, Вы писали:


VEL>>Мне в программке нужна была функция, считывающая строки из файла. Написал код:


VEL>>
VEL>>void getVector(ifstream f, vector<string> vec){
VEL>>    string s;
VEL>>    while(getline(f, s))
VEL>>        vec.push_back(s);
VEL>>}
VEL>>


P>А если пеердавать ifstream не по значению, а по ссылке или указателю: ifstream& f?


Да и вектор тоже по ссылке надо передавать.
Re: Проблема с getline()
От: zakharov75 Великобритания  
Дата: 09.12.11 11:13
Оценка:
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>Мне в программке нужна была функция, считывающая строки из файла. Написал код:


VEL>
VEL>void getVector(ifstream f, vector<string> vec){
VEL>    string s;
VEL>    while(getline(f, s))
VEL>        vec.push_back(s);
VEL>}
VEL>

VEL>Ругается на getline, а именно:
1>>c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\fstream(890): error C2248: std::basic_ios<_Elem,_Traits>::basic_ios: невозможно обратиться к private член, объявленному в классе "std::basic_ios<_Elem,_Traits>"
1>> with
1>> [
1>> _Elem=char,
1>> _Traits=std::char_traits<char>
1>> ]
1>> c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ios(176): см. объявление "std::basic_ios<_Elem,_Traits>::basic_ios"
1>> with
1>> [
1>> _Elem=char,
1>> _Traits=std::char_traits<char>
1>> ]
1>> Сообщение диагностики возникло в созданной компилятором функции "std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)"
1>> with
1>> [
1>> _Elem=char,
1>> _Traits=std::char_traits<char>
1>> ]

VEL>Копался в гугле, смотрел форумы — ответа не нашёл. Пробовал ставить ссылки — тоже не помогло.

используй передачу параметров по ссылке, а не по значению:

void getVector(ifstream& f, vector<string>& vec){

иначе и vector из функции не вынешь
Re: Проблема с getline()
От: maykie Россия  
Дата: 09.12.11 11:15
Оценка:
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>Мне в программке нужна была функция, считывающая строки из файла. Написал код:



1) замени аргументы на ссылки
2) getline возвращает stream&, а не бул. Используй

while(f.good())
{
  getline(f, s);
  vec.push_back(s);
}
Re[2]: Проблема с getline()
От: maykie Россия  
Дата: 09.12.11 11:17
Оценка:
Здравствуйте, maykie, Вы писали:

M>Здравствуйте, VeryEasyLogin, Вы писали:


VEL>>Мне в программке нужна была функция, считывающая строки из файла. Написал код:



M>1) замени аргументы на ссылки

M>2) getline возвращает stream&, а не бул. Используй

M>
M>while(f.good())
M>{
M>  getline(f, s);
M>  vec.push_back(s);
M>}
M>

Что-то я не туда посмотрел. 1) достаточно.
Re[2]: Проблема с getline()
От: VeryEasyLogin  
Дата: 09.12.11 11:22
Оценка:
Здравствуйте, maykie, Вы писали:

M>Здравствуйте, VeryEasyLogin, Вы писали:


VEL>>Мне в программке нужна была функция, считывающая строки из файла. Написал код:



M>1) замени аргументы на ссылки

M>2) getline возвращает stream&, а не бул. Используй

M>
M>while(f.good())
M>{
M>  getline(f, s);
M>  vec.push_back(s);
M>}
M>


Пробовал, не помогло. Тем более я писал, что уже пробовал передавать по ссылкам.
Re[3]: Проблема с getline()
От: uzhas Ниоткуда  
Дата: 09.12.11 11:45
Оценка:
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>Пробовал, не помогло. Тем более я писал, что уже пробовал передавать по ссылкам.

вам нужно еще разок попробовать проставить ссылки (без const)
возможно, ошибка в вызываемой функции, можете показать побольше кода
Re[3]: Проблема с getline()
От: pvirk Россия  
Дата: 09.12.11 11:53
Оценка:
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>Пробовал, не помогло. Тем более я писал, что уже пробовал передавать по ссылкам.


Значит пиши сюда, какие инклюды у тебя включаются.
Re[4]: Проблема с getline()
От: VeryEasyLogin  
Дата: 09.12.11 12:28
Оценка:
Здравствуйте, pvirk, Вы писали:

P>Здравствуйте, VeryEasyLogin, Вы писали:


VEL>>Пробовал, не помогло. Тем более я писал, что уже пробовал передавать по ссылкам.


P>Значит пиши сюда, какие инклюды у тебя включаются.


Вот мой весь код, пишу программку для запоминания англ. слов:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <string>
#include <vector>

using namespace std;

int sleepTime = 2000;

int openFile(ifstream f,string fname){
    f.open((fname+".txt").c_str());
    if(!f){
        cerr << "Ошибка чтения файла " << fname << ".txt" << endl;
        Sleep(sleepTime);
        return 0;
    }
}

void getVector(ifstream& f, vector<string>& vec){ //переписал, как у maykie, 1-й вариант сверху
    string s;
    while(f.good()){
        getline(f, s);
        vec.push_back(s);
    }
}

int main()
{
    setlocale(LC_ALL,"Russian");
    cout << "Программка для запоминания слов\nКакие слова переводить?\n 1: Русские\n Любое другое: Английские\n E: выход" << endl;
    char e;
    cin >> e;
    e = tolower(e);
    bool EngToRus;
    switch(e){
    case '1': EngToRus = false; break;
    case 'e': return 0; break;
    default: EngToRus = true; break;
    }
    vector<string> words[2];
    ifstream file1;
    openFile(file1, "e");
    getVector(file1, words[0]);
    ifstream file2;
    openFile(file2, "r");
    getVector(file2, words[1]);
    Sleep(sleepTime);
    return 0;
}

Программу ещё допиливать придется (функцию openFile и конец кода), но этот код не работает.
Re[5]: Проблема с getline()
От: rusted Беларусь  
Дата: 09.12.11 12:41
Оценка: +1
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>
VEL>int openFile(ifstream & f,string fname){
VEL>    f.open((fname+".txt").c_str());
VEL>    if(!f){
VEL>        cerr << "Ошибка чтения файла " << fname << ".txt" << endl;
VEL>        Sleep(sleepTime);
VEL>        return 0;
VEL>    }
VEL>}
VEL>


Почитайте еще раз про ссылки и передачу параметров.
Re[5]: Проблема с getline()
От: uzhas Ниоткуда  
Дата: 09.12.11 12:45
Оценка:
Здравствуйте, VeryEasyLogin, Вы писали:

VEL>Вот мой весь код, пишу программку для запоминания англ. слов:


попробуйте так:
// added reference for "f", added const for "fname"
int openFile(ifstream& f, const string& fname){
    f.open((fname+".txt").c_str());
    if(!f){
        cerr << "Ошибка чтения файла " << fname << ".txt" << endl;
        Sleep(sleepTime);
        return 0;
    }
}

void getVector(ifstream& f, vector<string>& vec){ //переписал, как у maykie, 1-й вариант сверху
    string s;
    while(f.good()){
        getline(f, s);
        vec.push_back(s);
    }
}
Re[6]: Проблема с getline()
От: VeryEasyLogin  
Дата: 09.12.11 12:48
Оценка:
Здравствуйте, rusted, Вы писали:

R>Здравствуйте, VeryEasyLogin, Вы писали:


VEL>>
VEL>>int openFile(ifstream & f,string fname){
VEL>>    f.open((fname+".txt").c_str());
VEL>>    if(!f){
VEL>>        cerr << "Ошибка чтения файла " << fname << ".txt" << endl;
VEL>>        Sleep(sleepTime);
VEL>>        return 0;
VEL>>    }
VEL>>}
VEL>>


R>Почитайте еще раз про ссылки и передачу параметров.


Помогло. И спасибо за совет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.