Błędy przy próbie deklaracji funkcji z ifstream

Błędy przy próbie deklaracji funkcji z ifstream
CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Witam!
Pisze program z grą Memory i właśnie chciałbym dodać funkcję która wyświetla ranking odczytywany z pliku na konsoli i tu własnie pojawia się problem.
napisałem funkcje:

Kopiuj
void wczytaj_ranking(ifstream &ranking){
    string imie_ranking;
    int wynik_ranking=0;
    if(ranking.good()){
        int n=0;
        while(n<10&&!ranking.eof()){

                ranking>>imie_ranking;
                ranking>>wynik_ranking;
                cout<<imie_ranking<<"    "<<wynik_ranking<<"pkt."<<endl;
                n++;

        }
    } else cout<<"blad. brak pliku ranking"<<endl;
    ranking.close();
} 

a następnie dodałem deklaracje do pliku nagłówkowego:

Kopiuj
void wczytaj_ranking(ifstream &ranking);

i wywala mi takie błędy:
projekt\algorytm.h:18: błąd:variable or field 'wczytaj_ranking' declared void
projekt\algorytm.h:18: błąd:'ifstream' was not declared in this scope
projekt\algorytm.h:18: błąd:'ranking' was not declared in this scope

bibliotekę <fstream> dodałem w pliku main.cpp gdzie funkcja jest wywoływana. Tam też deklaruje zmienna ifstream ranking("C:\ranking.txt");

czy ktoś wie w czym leży problem? wielkie dzieki z góry za pomoc

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

W pliku z deklaracją funkcji musisz też mieć include nagłówka żeby kompilator wiedział co to jest ifstream

CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0
Shalom napisał(a):

W pliku z deklaracją funkcji musisz też mieć include nagłówka żeby kompilator wiedział co to jest ifstream

zapomniałem napisać ale jest w pliku cpp icludowany plik źródłowy. jeszcze jakieś propozycje?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Tak, zacząć pisać kod jak człowiek. Plików cpp się NIE includuje. Poza tym podtrzymuje to co napisałem. Tam gdzie używasz jakiegoś typu musisz includować nagłówek z nim.

mcoder
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 117
0

Jakbyś przy includowaniu dostawał błąd w rodzaju: 'jakas_nazwa' : redefinition; multiple initialization

To ujmij zawartość pliku nagłówkowego w dyrektywy:

Kopiuj
#ifndef GLOBALS_H_INCLUDED
#define GLOBALS_H_INCLUDED

//tutaj klasy, zmienne, funkcje...

#endif
CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0
Shalom napisał(a):

Tak, zacząć pisać kod jak człowiek. Plików cpp się NIE includuje. Poza tym podtrzymuje to co napisałem. Tam gdzie używasz jakiegoś typu musisz includować nagłówek z nim.

Albo sie nie możemy dogadać albo ja czegoś nie rozumiem za co przepraszam.
Mam 2 pliki: algorytm.cpp oraz algorytm.h.
W pliku algorytm.cpp mam:
funkcje

Kopiuj
 void wczytaj_ranking(ifstream &ranking){
    string imie_ranking;
    int wynik_ranking=0;
    if(ranking.good()){
        int n=0;
        while(n<10&&!ranking.eof()){

                ranking>>imie_ranking;
                ranking>>wynik_ranking;
                cout<<imie_ranking<<"    "<<wynik_ranking<<"pkt."<<endl;
                n++;

        }
    } else cout<<"blad. brak pliku ranking"<<endl;
    ranking.close();
}

oraz

Kopiuj
#include "algorytm.h"
#include <fstream> 

natomiast w pliku algorytm**.h** mam:

Kopiuj
void wczytaj_ranking(ifstream &ranking);

możesz wytłumaczyć jeszcze raz gdzie co powinno być? gdzie powinienem wpisać

Kopiuj
 ifstream ranking("C:\\ranking.txt");

(obecnie jest to w pliku main.cpp gdzie wywołuje funkcje)

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

o_O przecież ja cały czas wyraźnie pisałem że musisz mieć include naglówka w swoim naglówku. Nie pojmuje czemu chciałbyś wstawiać tam deklaracje obiektu...

CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

po zastosowaniu sie do instrukcji "w pliku naglowkowym daj #include <fstream>, a: ifstream ranking("bkabka") zostaw w main.cpp przed wywolaniem. " dalej wywala błędu w pliku nagłówkowym przy

Kopiuj
 void wczytaj_ranking(ifstream &ranking);

przepraszam jeśli jestem nierozumny ale niestety programowanie nie jest moją mocną stroną

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

A masz tam w nagłówku using namespace std?

CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

nie miałem. dzięki wszystkim za pomoc ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.