2014-02-09 3 views
1

Я хотел бы знать, как читать файл с использованием потоков, но также использовать их внутри функции. Пока мой кодЧтение файлов с помощью функции C++

;:
#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <string> 
using namespace std; 
void burbuja(int[]); 
void imprimeArreglo (int[],int); 
void leeArchivo(string&); 
int arreglo[10]; 
int i; 

void burbuja (int a[]) 
{ 
int i,j; 
    for(i=0;i<10;i++) 
    { 
     for(j=0;j<i;j++) 
     { 
      if(a[i]>a[j]) 
      { 
       int temp=a[i]; //swap 
       a[i]=a[j]; 
       a[j]=temp; 
      } 

     } 

    } 
} 
void imprimeArreglo(int a[],int tam) 
{ 
    for(int i=0;i<tam;i++) 
    cout << a[i] << " "; 
} 
void leeArchivo(string& nombre) 
{ 
string filename = nombre; 
ifstream myfile(filename); 
string line; 
if (myfile.is_open()) { 
while (getline (myfile,line)) 
    { 
     cout << line << '\n'; 
    } 
    myfile.close(); 
} 
else cout << "Unable to open file"; 


} 
int main() 
{ 
    string nombre = "arr.txt"; 

    leeArchivo(nombre); 
     cin >> i ; 
     return 0; 
} 

Я хотел бы быть в состоянии назвать leeArchivo («arr.txt») от основного метода. С этим я получаю ошибки:

Error: bubble.cpp(37,14):'ifstream' is not a member of 'std' 
Error: bubble.cpp(37,19):Statement missing ; 
Error: bubble.cpp(39,20):Undefined symbol 'file' 
Error: bubble.cpp(39,25):Could not find a match for 'std::getline(undefined,std::basic_string<char,std::string_char_traits<char>,std::allocator<char>>)' 

Что я здесь отсутствует? (Я новичок в C++) файл Я пытаюсь прочитать имеет следующую структуру: <number>

<number> <number> <number> ...

EG:

=========================================

EDIT:Я использую Borland C++ 5.02

EDIT 2: Обновленный код, используя Geany Теперь об ошибке: BUBBLE.cpp:38:25: error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(std::string&)'

+3

1) Ваша основная функция не имеет типа возвращаемого значения, 2) вы 'используя патезрас;' но в некотором месте по-прежнему ставить 'std ::' in. Просто удалите директиву using и определите 'std ::', 3) ['std :: ifstream'] (http://en.cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream) определенно является членом пространства имен 'std ::' – Borgleader

+2

Это говорит о том, что компилятор вы используете? (Я удивлен, что он ничего не сказал о том, что у основного не было типа возврата) – Borgleader

+1

За пределами нестандартного объявления 'main()', [это должно быть правильно скомпилировано] (http://ideone.com/KDy4mj). Независимо от того, что вы лишили кода при его публикации, верните его и обновите сообщение. При этом добавьте компилятор и платформу, на которой вы строите. (И я бы использовал 'cstdlib', но это не должно приводить к проблеме, с которой вы столкнулись, для этого отвечает код, который вы * не * показываете). Ошибки сообщают, что они находятся в строках 37 и 39. Очевидно, что чего-то не хватает. – WhozCraig

ответ

1

Это особенно странное поведение с ifstream. Попробуйте изменить:

void leeArchivo(const string&); 
void leeArchivo(const string& nombre) 
{ 
    ifstream file(nombre.c_str()); 
    string line; 
    while(getline(file,line)) { 
     cout << line << endl; 
    } 
} 

int main() 
{ 
    leeArchivo("arr.txt"); 
    return 0; 
} 

Кроме того, использование:

#include <cstdlib> 

Вместо:

#include <stdlib.h> 
+0

При попытке использовать cstdlib я получаю сообщение об ошибке. 'Ошибка: bubble.cpp (2,2): Невозможно открыть файл include 'CSTDLIB.h'' –

+0

@DavidMerinos: вы пытаетесь' #include '. Этого не существует. Это должно быть: '#include '. – jrd1

+0

Нет, моя строка: '#include ' –

Смежные вопросы