Frage zu code



  • Hallo,

    also schon langsam bin ich mit meinem Latein am ende, der Code will und will nicht laufen 😉

    Das ganze sollte eben nur eine txt datei einlesen, aber er erkennt nicht, das "readTxtFile" schon deklariert wurde... hier der code:

    Main.cpp

    #include <iostream>
    #include <string>
    #include "declarations.h"
    
    using namespace std;
    
    int main()
    {
        openFile();
    
        return 0;
    }
    

    openFile.cpp

    #include <iostream>
    #include <fstream>
    #include "declarations.h"
    
    using namespace std;
    
    int openFile()
    {
        ifstream readTxtFile("test.txt");
    
        if(!readTxtFile.is_open())
        {
            cout << "Fehler beim einlesen der Datei, you SUCK!" << endl;
            return 0;
        }
        else
        {
            cout << "Einlesen gestartet" << endl;
            readFile();
        }
        return 0;
    
    }
    

    readFile.cpp

    #include "declarations.h"
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    char array[100];
    
    int readFile()
    {
    
        while (!readTxtFile.eof())
        {
            readTxtFile.getline(array, 100);
        }
    
        for (int i = 0; i <= 100; i++)
        {
            cout << array[i];
        }
    
        return 0;
    
    }
    

    declarations.h

    #ifndef OPENFILE_H
    #define	OPENFILE_H
    #include <fstream>
    
    int openFile();
    int readFile();
    
    #endif	/* OPENFILE_H */
    

    Wo ist den da der teufel begraben? mit #include <openFile.cpp> war nichts getan...

    hat da jemand rat für mich?

    danke & lg



  • Was is die genaue Fehlermeldung?
    Wer spuckt den Fehler aus? Compiler? OS? Linker?
    "Geht nicht" is zu generell..
    lg



  • Hi,

    danke für deine schnelle antwort!

    hier die fehlermeldung:

    readFile.cpp: In function ‘int readFile()’:
    readFile.cpp:13: error: ‘readTxtFile’ was not declared in this scope
    make[2]: *** [build/Debug/GNU-Linux-x86/readFile.o] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    
    BUILD FAILED (exit value 2, total time: 472ms)
    


  • Nach zwei Jahren im Forum solltest du langsam wissen, dass vernünftige Threadtitel von Vorteil sind. 🙄

    Dein readTxtFile ist nicht sichtbar in "readFile.cpp" . Wieso sollte es auch? Ich würde zu einer Klasse raten, die den std::ifstream als Member hat und die beiden Methoden openFile() und readFile() anbietet. Oder du übergibst eine Referenz auf std::ifstream an die beiden Funktionen.

    Und verwende doch std::string statt des auf 100 Zeichen begrenzten char -Arrays. Aber nicht global, dazu besteht kein Grund! Ausserdem solltest du unnötige Kompilierzeit-Abhängigkeiten reduzieren, auch wenn das vielleicht erst später relevant ist. Die folgenden Includes sind nicht nötig:

    // Main.cpp
    #include <iostream>
    #include <string>
    
    // declarations.h
    #include <fstream>
    


  • Is klar was da los ist.
    Variablen sind nur innerhalb einer Funktion gültig, wenn sie dort angelegt sind.
    Schlauer wäre es hier, ein neues ifstream Objekt anzulegen. Wenn Du das Objekt weiterverwenden willst, solltest Du diese Funktionen und Variablen in eine Klasse packen:

    ////////////
    // MyFileClass.hpp
    ///////////
    class MyFileClass
    {
    public:
       int ReadFile();
       int WriteFile();
    
    private:
       std::ifstream m_stream;
    }
    
    /////////////
    // MyFileClass.cpp
    //////////////
    MyFileClass::ReadFile()
    {
      // Code
    }
    
    int MyFileClass::WriteFile()
    {  
      // Code
    }
    

    lg



  • ok, danke für die zahlreichen antworten!

    ich muss jetzt los, werd das nachher probieren!

    danke & lg

    🙂 👍



  • hallo,

    ok ich hab da jetzt mal weiterprobiert... aber leider stehe ich an:

    zwar hast unbekannter Nr.42 😉 gesagt ein ifstream Objekt anzulegen, aber durch ifstream xxx mach ich das ja... also hab ich dann das objekt xxx.

    Wenn ich die txt datei öffnen will, greife ich ja mit den methoden von xxx auf die datei zu, zB

    ifstream readTxtFile("test.txt");
    

    Wie sollte ich dann auf test.txt zugreifen wenn nicht so?

    danke & lg



  • In deiner readFile()-Funktion greifst du aber auf die dort nicht bekannte Variable 'readTxtFile' zu. Diese hast du bisher nur lokal in der openFile()-Funktion definiert.

    Die Fehlermeldung spricht ja auch von 'not declared in this scope'. Erkundige dich mal nach "Gültigkeitsbereich von Variablen" -)


Anmelden zum Antworten