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

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:

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:

void wczytaj_ranking(ifstream &ranking);

i wywala mi takie błędy:
projekt\algorytm.h błąd:variable or field 'wczytaj_ranking' declared void
projekt\algorytm.h błąd:'ifstream' was not declared in this scope
projekt\algorytm.h 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

0

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

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?

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.

0

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

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

#ifndef GLOBALS_H_INCLUDED
#define GLOBALS_H_INCLUDED

//tutaj klasy, zmienne, funkcje...

#endif
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

 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

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

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

void wczytaj_ranking(ifstream &ranking);

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

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

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

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...

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

 void wczytaj_ranking(ifstream &ranking);

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

0

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

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1