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
readTxtFileist nicht sichtbar in"readFile.cpp". Wieso sollte es auch? Ich würde zu einer Klasse raten, die denstd::ifstreamals Member hat und die beiden MethodenopenFile()undreadFile()anbietet. Oder du übergibst eine Referenz aufstd::ifstreaman die beiden Funktionen.Und verwende doch
std::stringstatt des auf 100 Zeichen begrenztenchar-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" -)