2017-12-02 4 views
0

Ich leide derzeit mit einem Compilerfehler im Zusammenhang mit ifstreams, und ich würde jede Hilfe sehr schätzen! Vielen Dank im Voraus!Fehler in der ungültigen Initialisierung von iStream beim Übergeben als Referenz

Mein Code ist folgende:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

const char EOS = '#'; 

bool end_of_sequence (ifstream &file) 
{ 
    //Pre: EOS has not been read. 
    //Post: whether or not the next character to read is EOS, in which case it is read. 
    char test = file.get(); 
    bool ii_EOS = (test == EOS); 
    if (!ii_EOS) file.unget(); 
    return ii_EOS; 
} 

bool is_it_letter (char value_to_test) 
{ 
    //Pre: value_to_test is an English character. 
    //Post: whether or not value_to_test is a letter. 
    return ((value_to_test >= 'a' && value_to_test <= 'z') || (value_to_test >= 'A' && value_to_test <= 'Z') || value_to_test == '·'); 
} 

bool test_word (ifstream &file, char undesired) 
{ 
    //Pre: file hasn't reached eof and is ready for a word to be read. 
    //Post: whether or not [not (the first letter of the next word is undesired)]. 
    char first_letter = file.get(); 
    bool test = (first_letter != undesired && is_it_letter(first_letter)); 
    file.unget(); 
    return (!test); //I later found out test shouldn't be denied. 
} 

    void print_spaces (ifstream &file) 
{ 
    //Pre: true. 
    //Post: has read all the next non-letters in file and printed them onscreen. 
    char current_space = ' '; 
    while (!is_it_letter(current_space) && !end_of_sequence(file)) 
    { 
     file.get(current_space); 
     if (!is_it_letter(current_space) && current_space != EOS) cout << current_space; 
    } 
    file.unget(); 
} 

void print_word (ifstream &file, bool printable) 
{ 
    //Pre: true. 
    //Post: if file has a word ready to be read, it is read. It is also printed onscreen if printable is true. 
    char current_letter = file.get(); 
    while (is_it_letter(current_letter)) 
    { 
     if (printable) cout << current_letter; 
     file.get(current_letter); 
    } 
    file.unget(); 
} 

int main() 
{ 
    //Declarations. 
    string input; 
    char undesired; 

    //Input. 
    cout << "INTRODUEIX EL NOM DEL FITXER:" << endl; 
    cin >> input; 
    ifstream mainfile(input.c_str()); 
    if (!mainfile.is_open()) 
    { 
     cout << "NO HEM TROBAT EL FITXER." << endl; 
     return 1; 
    } 
    cout << "INTRODUEIX UN CARACTER:" << endl; 
    cin >> undesired; 

    //Comput + output. 
    cout << "TEXT RESULTANT D'ELIMINAR LES PARAULES QUE COMENCEN PER " << undesired << ":" << endl; 
    while (!end_of_sequence(mainfile)) 
    { 
     print_word(mainfile, test_word(mainfile,undesired)); 
     print_spaces(mainfile); 
    } 

    return 0; 
} 

Und Aufruf der Funktion ich diesen Fehler bin immer in ist:

print_word(mainfile, test_word(undesired)); 

(Fehler: ungültige Initialisierung einer Referenz des Typs ‚std :: ifstream & {aka std :: basic_ifstream &} 'vom Ausdruck des Typs' char '|)

Falls es relevant ist, ist das Programm selbst gemeint Drucken Sie auf dem Bildschirm einen Satz aus einer Datei gelesen (mit einem nicht-physikalischen Ende der Sequenz, sei es "#") überspringen die Wörter beginnend mit einem zuvor eingegebenen Buchstaben.

Wegen des so genannten Fehlers kann es nicht kompiliert werden. Es könnte ein sehr dummer Fehler sein, ich bin immer noch sehr neu im Programmieren. Ich danke dir sehr!

BEARBEITEN. Ich erkannte auch (nachdem ich es ausgeführt habe), dass die Rückgabe für test_word nicht gemäß dem Zweck des Programms verweigert werden sollte. Ich schrieb alles bei Nacht und ich wusste, dass es einige dumme Fehler geben würde. Es tut uns leid!

+0

'test_word' benötigt zwei Argumente. Ihr Aufruf mit 'print_word (mainfile, test_word (unerwünscht));' liefert nur eins. – WhozCraig

+0

Oh, ich sehe es jetzt! Vielen Dank WhozCraig! – LyoTheLyon

Antwort

2

Ich denke es gibt nicht genügend Informationen um sicher zu sein, da ich keine Ahnung habe was mainfile und undesired sind. test_word benötigt jedoch zwei Argumente und Sie übergeben nur einen. (Es können jedoch Standardargumente in einer Header-Datei angegeben sein, die wir nicht sehen).

+0

Sie haben Recht! Ich habe stattdessen den vollständigen Code zur Verfügung gestellt, um klarer zu sein. Dies war mein erster Beitrag und ich bin nicht benutzt, vielen Dank! Das Problem bestand darin, nur ein Argument an test_word zu übergeben. – LyoTheLyon

Verwandte Themen