Kommt nur murks raus
-
Meinst du das eigentlich ernst? Das ist ein Nachbau von vector für C und hat mit std::vector herzlich wenig am Hut. Die richtige Referenz ist hier:
http://www.cplusplus.com/reference/stl/vector/
-
nu bekomm ich halt immer diesen fehler:
Speicherzugriffsfehler (Speicherabzug geschrieben)
-
Das liegt daran, dass du etwas falsch gemacht hast.
Ernsthaft: benutze den Debugger (valgrind oder auch gdb) und finde heraus, in welcher Zeile das passiert.
-
ah danke
-
Da hast du wohl murks gebaut.
-
abgeschrieben halt
-
Habs nun so kannnst auch ohne fehler compelieren aber es erscheint nichts?
void SYSInfo::getDev(std::string filename){ std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); Data[0]='\x00'; } void SYSInfo::printDev(){ std::cout << &Data[0] << std::endl; }namespace exsystem { class SYSInfo { public void printDev(); void getDev(std::string filename); private: std::string Data; std::string Dev;#include "../sysinfo.h" int main(){ exsystem::SYSInfo a; a.getDev( "/proc/meminfo" ); a.printDev(); return 0;
-
Ich glaube nicht, dass Pseudodateien Seek-Operationen unterstützen.
Und warum überhaupt so kompliziert?#include <iostream> #include <fstream> int main() { std::cout << std::ifstream("/proc/meminfo").rdbuf(); }
-
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Hast du auch Text in deiner Datei drin stehen? ...
Oder eventuell nur 1 Zeichen in der Textdatei welches durch den Angehangenen Nullterminator entfernt wird. Nimm mal mein Beispiel und sei dir sicher das in der Textdatei auch Text steht. ^^Und std::vector nimmst du nicht weil du das mit dem resize nicht hinbekommst ... google: CompilerName vector resize
Wäre eventuell in passender Suchbegriff.
-
Ich glaube nicht, dass Pseudodateien Seek-Operationen unterstützen.
Selbst wenn sie es unterstützen würden (tun sie nicht), dann würde folgende Zeile immer noch alles ruinieren:
Data[0]='\x00';
-
MFK schrieb:
Ich glaube nicht, dass Pseudodateien Seek-Operationen unterstützen.
Und warum überhaupt so kompliziert?#include <iostream> #include <fstream> int main() { std::cout << std::ifstream("/proc/meminfo").rdbuf(); }Ich solls mit der Klasse und mit get und set machen! Wäre ja schön wenns so leicht wäre

Bassmaster schrieb:
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }sieht gut aus aber egal wie ich es mache ... also ob in der Klasse oder einfach alles in die Main ... der fehler bleibt:
25:17: Fehler: »Data« wurde in diesem Gültigkeitsbereich nicht definiert }
-
Ich poste noch mal meinen jetzigen Quellentext!
Also das Problem ist das einfach nichts in der Konsole erscheint! Ich hab auch noch mal mit verschiedenen Dateipfaden rum gespielt!
/proc/meminfo
test.txt
/proc/net/dev <-- da ja nicht geht habs aber probiert.h
#include <iostream> #include <vector> #ifndef SYSINFO_H #define SYSINFO_H namespace exsystem { class SYSInfo { public: void getDev(std::string filename); void write(); private: std::string Data; std::string Dev;.cpp
#include <cstdio> #include <unistd.h> #include <sys/types.h> #include <sys/reboot.h> #include <sys/sysinfo.h> #include <sys/utsname.h> #include <fstream> #include <string> #include <vector> #include "sysinfo.h" void SYSInfo::getDev(std::string filename){ std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } void SYSInfo::write(){ std::cout << Data << std::endl; }main.cpp
#include "../sysinfo.h" #include <fstream> int main(){ a.getDev("test.txt"); a.write(); return 0; }
-
Enno schrieb:
Ich solls mit der Klasse und mit get und set machen! Wäre ja schön wenns so leicht wäre

Ja und?
#include <sstream> #include <iostream> #include <fstream> using namespace std; void SYSInfo::getDev(std::string filename) { istringstream iss; iss << ifstream(filename.c_str()).rdbuf(); Data = iss.str(); } void SYSInfo::write(){ std::cout << Data << std::endl; }
-
@ Enno
liest du dir eigentlich durch was hier gepostet wird oder machst du nur Copy & Paste

In dem Quelltext ist ein kleiner Fehler findest du ihn?
Hinweis: Such mal nach string Data;In diesem Fall hier müsste man das string Data; deklarieren.
Ich hab den Code eben irgendwo zwischen Code von mir gepackt und hab wohl was vergessen mit aus meiner IDE rauszukopieren.

WAS könnte das wohl sein?
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Und schau dir mal deine Fehlermeldung an durchlesen und nicht nur kopieren und hier im Forum einfügen ...
»Data« wurde in diesem Gültigkeitsbereich nicht definiert
Besser wäre es sowieso wenn du Data als Referenz an die Funktion übergeben würdest.
Aber bei deinem bisherigen Code hast du ja im moment Data in der Klasse unter private stehen das is ja auch eigentlich ok.
Aber lass erst mal deine Klasse weg und versuch nur mein simples Beispiel ans laufen zu bekommen danach solltest du das auch in deine Klasse einbauen können.
Und kauf dir das Buch: http://www.amazon.de/Einführung-die-Programmierung-Pearson-Studium/dp/3868940057
@ Enno ich hab dir doch den C++ Primer per Email geschickt hast du da eigentlich mal reingeschaut? Oder hab ich den wem anderes geschickt mhhm

-
Erstmal vielen Dank für deine Geduld und natürlich lese ich alles und probiere rum! Da du das nicht siehst kommt das natürlich so wie copy paste rüber

Bassmaster schrieb:
@ Enno
liest du dir eigentlich durch was hier gepostet wird oder machst du nur Copy & Paste

In dem Quelltext ist ein kleiner Fehler findest du ihn?
Hinweis: Such mal nach string Data;In diesem Fall hier müsste man das string Data; deklarieren.
Ich hab den Code eben irgendwo zwischen Code von mir gepackt und hab wohl was vergessen mit aus meiner IDE rauszukopieren.

WAS könnte das wohl sein?Weiß ich leider irgentwie nicht
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Und schau dir mal deine Fehlermeldung an durchlesen und nicht nur kopieren und hier im Forum einfügen ...
»Data« wurde in diesem Gültigkeitsbereich nicht definiert
Besser wäre es sowieso wenn du Data als Referenz an die Funktion übergeben würdest.Das hab ich nun noch nicht verstanden werde nun aber google bewegen
Aber bei deinem bisherigen Code hast du ja im moment Data in der Klasse unter private stehen das is ja auch eigentlich ok.
Aber lass erst mal deine Klasse weg und versuch nur mein simples Beispiel ans laufen zu bekommen danach solltest du das auch in deine Klasse einbauen können.
Und kauf dir das Buch: http://www.amazon.de/Einführung-die-Programmierung-Pearson-Studium/dp/3868940057
Ich hab es nun so:
#include "../sysinfo.h" #include <fstream> void getDev(std::string filename){ std::string Data; // das hier fehlt auf jeden Fall? std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(){ std::string Data; // hier müsste man das glaube ich nicht deklarieren oder? getDev("test.txt"); // kann man das vllcht so machen mit diesem a.getDev? da weiß ich nicht genau was ich machen soll! std::cout << &Data[0] << std::endl; return 0; }EDIT: @Bassmaster hab die e-mail nicht bekommen ... schick nochmal an sesshafter@yahoo.de oder sag mir an welche du geschickt hast? hab aber alles durch geguckt
-
Enno schrieb:
Erstmal vielen Dank für deine Geduld und natürlich lese ich alles und probiere rum!
Nicht probieren! Probieren ist was für den Hosenkauf. Beim Programmieren ist wichtig zu wissen, was man tut. Code ist Logik pur, du musst von jedem Zeichen in deinem Programm wissen, was es bedeutet und warum du es gesetzt hast. Kauf dir ein Buch! Mit ein paar Tagen Lernen hättest du das Problem schon längst gelöst, so einfach ist das. Stattdessen fragst du hier schon seit Anfang September immer wieder die gleiche Frage und hast dabei gefühlt noch keine einzige Antwort so richtig verstanden.
-
Enno schau mal in deine Emails ich hab dir gerade eine Email geschrieben.
So wäre es richtig:
#include <iostream> #include <fstream> using namespace std; string Data; // Globale Variable ist hier überall gültig void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Oder so mit Referenz geht auch:
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename, string &Data) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { string Data; // Lokale Variable welche nur im int main() scope gültig ist getDev("test.txt", Data ); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Google mal nach Begriff Scope im Zusammenhang mit C++.
Hier steht auch was dazu: http://msdn.microsoft.com/en-us/library/b7kfh662(v=vs.80).aspx ( Linux, MAC, Window Betriebssystem unabhängig )
-
Ich versteh es nicht ... jetzt hab ich das alles genau so ... er gibt mir auch kein fehler nur wenn ich es ausführe kommt nichts ....
naja ich les mal den primer
hab die e-mail jetzt auch bekommen
-
Entweder existiert bei dir die Datei test.txt nicht in dem Ordner wo dein Programm liegt oder in der Datei steht kein Text drin.
Versuchs mal so:
#include <iostream> #include <fstream> using namespace std; string Data; void getDev(std::string filename) { ifstream file(filename.c_str()); if ( ! file.good() ) { cout<<"Die Datei "<<filename<<" existiert nicht"<<endl; return ; } file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }
-
jawohl lag falsch und jetzt kam auch die message ... liegt nun richtig und klappt
du bist ein schatz^^
ich werd nun den primer weiter lesen und da ich bis zum ende der woche zeit hab mich wohl dann melden ob es alles klappt.