Kommt nur murks raus



  • 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


  • Mod

    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.



  • Oh man, was für ein Gefrickel. Wenn Du mit dem Inhalt wirklich nur einen String füllen willst:

    #include <string>
    #include <iterator>
    #include <fstream>
    #include <istream>
    
    std::string get_dev(std::string const & file)
    {
        std::ifstream reader(file.c_str());
        std::istreambuf_iterator<char> i(reader);
        std::istreambuf_iterator<char> end;
        return std::string(i, end);
    }
    

    Benutzung: std::cout << get_dev("bla.dat") << '\n';



  • So ich hab es nun noch einmal anders gemacht ...

    Nur hab ich irgendwie ein linker Problem wenn ich das bei den gegoogelten Sachen richtig gelesen haben!
    Hab aber nichts für die Lösung gefunden!

    #include <iostream>
    
    #ifndef SYSINFO_H
    #define SYSINFO_H
    
    namespace exsystem {
    class SYSInfo {
    public:
      const char *getDev();
    
    #include <fstream>
    #include <string>
    #include <iostream>
    
    #include "sysinfo.h"
    
    //#ifdef POSIX
    
    using namespace exsystem;
    
    const char *getDev(){
      std::string line;
      std::ifstream read("test.txt");
      if (read.is_open()){
    
        while (getline(read, line)){
          std::cout << line << std::endl;
        }
        read.close();
      }
    
      else std::cout << "Unable to read file" << std::endl; 
    }
    
    #include <iostream>
    
    #include "../sysinfo.h"
    
    int main (){
      exsystem::SYSInfo a;
      std::cout << "Net: " << a.getDev() << std::endl;
    }
    

    Fehler:

    sysinfo.cpp:(.text+0x1d): undefined reference to `exsystem::SYSInfo::getDev()'
    collect2: ld gab 1 als Ende-Status zurück
    


  • Was machst du denn da schon wieder. ^^ --> const char *getDev() 😮

    Tachyon hat doch eine saubere Lösung bereits für dich gebaut.

    Du musst doch nur die Funktion von Tachyon in deine Klasse einbauen.
    Naja und ab besten noch prüfen ob die Datei auch wirklich existiert und on diese ausgelesen werden konnte.

    Schreib mal in deinem Code:

    std::string exsystem :: SYSInfo :: get_dev(std::string const & file)
    {
        std::ifstream reader(file.c_str());
        std::istreambuf_iterator<char> i(reader);
        std::istreambuf_iterator<char> end;
        return std::string(i, end);
    }
    

    Wenn es funktioniert dann kannste ja noch die Abfragen einbauen.

    Minimier die Sacheb mal aufs minimalste schreib z.b. erst eine Klasse ohne den Namespace Kram und versuch es dadrin zum laufen zu bekommen. Ich glaub das wäre für dich erstmal etwas leichter. Danach kannste ja die Namespace Sachen einbauen



  • Er compiliert das wunderbar^^ wie bei meinem kram auch!

    Nur mir scheint irgendwie eine Lib abhanden gekommen zu sein oder so ?!

    hab es so eingefügt und tada:

    undefined reference to `exsystem::SYSInfo::getDev()'
    collect2: ld gab 1 als Ende-Status zurück
    


  • Enno, warum gibt getDev() nichts zurück? Und wenn sie eine Memberfunktion von SYSInfo ist, dann musst du das bei der Definition auch angeben.



  • Wow 😃 haha endlich klappt es!

    Sogar beide varianten xD und da das hier mit dem const char * hier vorgegeben ist lass ich die stehen =).
    Problem war das #include <fstream> in der Main gefehlt hat und das bei dem was ich oben gepostet hab das SYSInfo:: fehlte!

    Vielen danke für die ganze geduldige Hilfe nun hab ich es alles auch verstanden! ❤



  • Enno schrieb:

    Vielen danke für die ganze geduldige Hilfe nun hab ich es alles auch verstanden! ❤

    Das glaub ich dir nicht. 😃



  • Frag mich was zu meinem Code ich kann es alles erklären!



  • Warum schreibst du:

    const char *getDev()
    

    und nicht

    std::string getDev();
    

    Warum lässt du keine Wert zurückgeben?



  • Ich wurde beauftragt das mit const char zu machen und ja ist hier bissl unlogisch da ich auf nichts zeige was ich dann zurück gebe^^ aber das kommt noch drum hab ich das so gemacht.^^
    Sry ich hab nicht mein ganzes Projekt verraten. 😃 Es läuft jetzt so das ich die Infos aus /proc/net/dev parsen soll und diese dann verarbeiten muss so das ich z.B. ausspucken kann wie viele Pakete geschickt wurden! Falls du das verstehst. 😃 Ich hab ja manchmal ausdrucks Problem und keiner weiß was ich mein! 😛



  • Enno schrieb:

    Sry ich hab nicht mein ganzes Projekt verraten. 😃

    Versteh mich bitte nicht falsch, aber dafür sind wir dir sogar dankbar.



  • Enno schrieb:

    Sry ich hab nicht mein ganzes Projekt verraten. 😃 Es läuft jetzt so das ich die Infos aus /proc/net/dev parsen soll und diese dann verarbeiten muss ...

    Na, dann wird das hier ja noch zur unendlichen Geschichte ...



  • Belli schrieb:

    Na, dann wird das hier ja noch zur unendlichen Geschichte ...

    ist es doch schon. Die Sache mit const char* haben wir in einem anderen Thread schon ausführlich durchgekaut



  • Ja, ich versteh es.^^

    Enno schrieb:

    Ich wurde beauftragt das mit const char

    Aber ich muss schon sagen eure Firma scheint echt lustig zu sein. 😃

    Enno schrieb:

    Sry ich hab nicht mein ganzes Projekt verraten.

    Was is daran so Schlimm? Umso mehr du uns sagst was du genau machen willst umso besser können wir dir doch helfen.

    Naja dann noch viel Spaß mit dem Projekt.^^


Anmelden zum Antworten