Kommt nur murks raus



  • Enno schrieb:

    Das versteh ich nun nicht ganz.
    Ich hab also meine 3 Dateien: .h .cpp .cpp
    Jetzt soll ich mir für operator<< operator>> und skip_line noch eine extra .h schreiben + extra .cpp?
    Muss die dann in meine .cpp(nicht main) mit #include "operator.h" rein oder wo inculdieren?

    Ich würde das irgendwie so machen:

    1. Du erstellst eine Klasse class manage_dev { ..... }; . Dann hast du eine manage_dev.cpp und eine manage_dev.h
    2. Dann hast du die Input/Output Funktionen. Dafür erstellst du eine io.h und eine io.cpp .
    3. In der io.cpp inkludierst du dann manage_dev.h und in der io.h reicht eine Forwärtsdeklaration class manage_dev;
    4. In der main.cpp inkludierst du dann manage_dev.h und io.h .

    Ich hoffe, ich hab jetzt auf die Schnelle nichts durcheinander gebracht.



  • Oh je ...
    Also ich bin grade am basteln und es scheint fast fertig.
    Jedoch weiß ich nicht ob die io.h und io.cpp so richtig sind:

    .cpp

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector> 
    #include <iterator> 
    #include <limits>
    #include <utility>
    
    #include "sysinfo.h"
    
    std::istream& SYSInfo::skip_line(std::istream& in){ 
      return in.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); 
    }
    
    std::istream& SYSInfo::operator>>(std::istream& in, face& f){ 
      return in 
      >> f.name 
      >> f.bytes_received >> f.packets_received >> f.errs_received >> f.drop_received >> f.fifo_received >> f.frame_received >> f.compressed_received >> f. multicast_received         >> f.bytes_transmitted >> f.packets_transmitted >> f.errs_transmitted >> f.drop_transmitted >> f.fifo_transmitted >> f.colls_transmitted >> f.carrier_transmitted >> f.compressed_transmitted; 
    }
    
    std::ostream& SYSInfo::operator<<(std::ostream& out, const face& f){ 
      return out 
      << f.name << "Bytes: " 
      << f.bytes_received    << " Packets: " << f.packets_received    << " Errs: " << f.errs_received       << " Drop: " << f.drop_received       << " Fifo: " 
      << f.fifo_received     << " Frame: " << f.frame_received      << " Compressed: " << f.compressed_received << " Multicast: " << f. multicast_received << " Bytes: " 
      << f.bytes_transmitted << " Packets: " << f.packets_transmitted << " Errs: " << f.errs_transmitted    << " Drop: " << f.drop_transmitted    << " Fifo: " 
      << f.fifo_transmitted  << " Coll: " << f.colls_transmitted   << " Carrier: " << f.carrier_transmitted << " Compressed: " << f.compressed_transmitted; 
    }
    

    Also die .h ist sicher falsch denke ich 😞

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector> 
    #include <iterator> 
    #include <limits>
    #include <utility>
    
    #ifndef OH_H
    #define OH_H
    
    std::istream& skip_line(std::istream& in);
    
    std::istream& operator>>(std::istream& in, face& f);
    
    std::ostream& operator<<(std::ostream& out, const face& f);
    
    #endif
    

    Ich denke das hier ist auch noch wichtig aus der sysinfo.cpp:

    #include <fstream>
    #include <string>
    #include <iostream>
    #include <vector> 
    #include <iterator> 
    #include <limits>
    #include <utility>
    
    #include "sysinfo.h"
    
    //#ifdef POSIX
    
    using namespace exsystem; 
    using namespace std;
    
    void SYSInfo::read_dev(vector<face>& dev){ 
      ifstream file("/proc/net/dev"); 
      file >> skip_line; // Überspringe erste Zeile. 
      file >> skip_line; // Überspringe zweite Zeile. 
      for(face f; file>>f; dev.push_back(f)); 
    } 
    
    void SYSInfo::table(vector<face>& dev){ 
      for(vector<face>::iterator it=dev.begin(); it!=dev.end(); ++it) 
        cout << '\n' << *it << '\n'; 
    } 
    
    unsigned SYSInfo::getPackets(vector<face>& dev){
      return dev[2].packets_received;  
    }
    
    vector<pair<string,unsigned> > SYSInfo::packets_received_all(const vector<face>& dev){
      vector<pair<string,unsigned> > packets_received; 
      for(vector<face>::const_iterator it=dev.begin(); it!=dev.end(); ++it) 
        packets_received.push_back( make_pair(it->name,it->packets_received) ); 
      return packets_received;
    }
    

    Meine Compiler Fehler dazu:

    sysinfo.h:56:8: Fehler: zusätzliche Qualifizierung »exsystem::SYSInfo::« an Element »read_dev« [-fpermissive]
    sysinfo.h:57:8: Fehler: zusätzliche Qualifizierung »exsystem::SYSInfo::« an Element »table« [-fpermissive]
    sysinfo.h:58:12: Fehler: zusätzliche Qualifizierung »exsystem::SYSInfo::« an Element »getPackets« [-fpermissive]
    sysinfo.cpp: In Elementfunktion »void exsystem::SYSInfo::read_dev(std::vector<exsystem::SYSInfo::face>&)«:
    sysinfo.cpp:41:11: Fehler: »skip_line« wurde in diesem Gültigkeitsbereich nicht definiert
    sysinfo.cpp:43:21: Fehler: keine Übereinstimmung für »operator>>« in »file >> f«
    sysinfo.cpp:43:21: Anmerkung: Kandidaten sind:
    

    Warum zusätzliche Qualifizierung und was ist auf einmal mit skip_line los?

    LG Enno



  • Hä?
    Ich hab mir so etwas vorgestellt:

    io.h

    #pragma once // Das brauchst du nicht, ist nur ein VS Bug.
    #ifndef IO_H
    #define IO_H
    
    #include <iostream>
    struct face;
    
    std::istream& skip_line(std::istream& in);
    std::istream& operator>>(std::istream& in, face& f);
    std::ostream& operator<<(std::ostream& out, const face& f);
    
    #endif
    

    io.cpp

    #include "io.h"
    #include "Test.h"
    #include <limits>
    
    std::istream& skip_line(std::istream& in){
      return in.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    }
    
    std::istream& operator>>(std::istream& in, face& f){
      return in
      >> f.name
      >> f.bytes_received >> f.packets_received >> f.errs_received >> f.drop_received >> f.fifo_received >> f.frame_received >> f.compressed_received >> f. multicast_received         >> f.bytes_transmitted >> f.packets_transmitted >> f.errs_transmitted >> f.drop_transmitted >> f.fifo_transmitted >> f.colls_transmitted >> f.carrier_transmitted >> f.compressed_transmitted;
    }
    
    std::ostream& operator<<(std::ostream& out, const face& f){
      return out
      << f.name << "Bytes: "
      << f.bytes_received    << " Packets: " << f.packets_received    << " Errs: " << f.errs_received       << " Drop: " << f.drop_received       << " Fifo: "
      << f.fifo_received     << " Frame: " << f.frame_received      << " Compressed: " << f.compressed_received << " Multicast: " << f. multicast_received << " Bytes: "
      << f.bytes_transmitted << " Packets: " << f.packets_transmitted << " Errs: " << f.errs_transmitted    << " Drop: " << f.drop_transmitted    << " Fifo: "
      << f.fifo_transmitted  << " Coll: " << f.colls_transmitted   << " Carrier: " << f.carrier_transmitted << " Compressed: " << f.compressed_transmitted;
    }
    

    sysinfo.h

    #pragma once // Das brauchst du nicht, ist nur ein VS Bug.
    #ifndef SYSInfo_H
    #define SYSInfo_H
    
    #include <string>
    #include <utility>
    #include <vector>
    
    struct face
    {
        std::string name;
    
        unsigned bytes_received;
        unsigned packets_received;
        unsigned errs_received;
        unsigned drop_received;
        unsigned fifo_received;
        unsigned frame_received;
        unsigned compressed_received;
        unsigned multicast_received;
    
        unsigned bytes_transmitted;
        unsigned packets_transmitted;
        unsigned errs_transmitted;
        unsigned drop_transmitted;
        unsigned fifo_transmitted;
        unsigned colls_transmitted;
        unsigned carrier_transmitted;
        unsigned compressed_transmitted;
    };
    
    class SYSInfo
    {
    	private:
    		std::vector<face> dev;
    	public:
    		void read_dev();
    		void table();
    		unsigned getPacket();
    		std::vector< std::pair<std::string,unsigned> > packets_received_all();
    };
    
    #endif
    

    sysinfo.cpp

    #include "sysinfo.h"
    #include "io.h"
    #include <fstream>
    #include <iterator>
    
    void SYSInfo::read_dev()
    {
    	  std::ifstream file("/proc/net/dev");
    	  file >> skip_line; // Überspringe erste Zeile.
    	  file >> skip_line; // Überspringe zweite Zeile.
    	  for(face f; file>>f; dev.push_back(f));
    }
    
    void SYSInfo::table(){
    	  for(std::vector<face>::iterator it=dev.begin(); it!=dev.end(); ++it)
    		std::cout << '\n' << *it << '\n';
    }
    
    unsigned SYSInfo::getPacket(){
    	return dev[2].packets_received;  
    }
    
    std::vector< std::pair<std::string,unsigned> > SYSInfo::packets_received_all(){
    	  std::vector< std::pair<std::string,unsigned> > packets_received;
    	  for(std::vector<face>::iterator it=dev.begin(); it!=dev.end(); ++it)
    		packets_received.push_back( make_pair(it->name,it->packets_received) );
    	  return packets_received;
    }
    

    main.cpp

    #include "sysinfo.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	SYSInfo sys_info;
    
        sys_info.read_dev();
        sys_info.table();
        vector<pair<string,unsigned>> packets_received = sys_info.packets_received_all();
    
        cout << endl << packets_received[0].first << ' ' << packets_received[0].second;
        cout << endl << packets_received[2].first << ' ' << packets_received[2].second;
    
    	cout << endl << sys_info.getPacket();
    }
    


  • Im Prinzip hatte ich es ja so nur die includes waren nicht richtig

    out schrieb:

    io.cpp

    #include "io.h"
    #include "Test.h" // ich denke ich brauch die nicht oder? ansonst was ist das?
    #include <limits>
    
    std::istream& skip_line(std::istream& in){
      return in.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    }
    
    std::istream& operator>>(std::istream& in, face& f){
      return in
      >> f.name
      >> f.bytes_received >> f.packets_received >> f.errs_received >> f.drop_received >> f.fifo_received >> f.frame_received >> f.compressed_received >> f. multicast_received         >> f.bytes_transmitted >> f.packets_transmitted >> f.errs_transmitted >> f.drop_transmitted >> f.fifo_transmitted >> f.colls_transmitted >> f.carrier_transmitted >> f.compressed_transmitted;
    }
    
    std::ostream& operator<<(std::ostream& out, const face& f){
      return out
      << f.name << "Bytes: "
      << f.bytes_received    << " Packets: " << f.packets_received    << " Errs: " << f.errs_received       << " Drop: " << f.drop_received       << " Fifo: "
      << f.fifo_received     << " Frame: " << f.frame_received      << " Compressed: " << f.compressed_received << " Multicast: " << f. multicast_received << " Bytes: "
      << f.bytes_transmitted << " Packets: " << f.packets_transmitted << " Errs: " << f.errs_transmitted    << " Drop: " << f.drop_transmitted    << " Fifo: "
      << f.fifo_transmitted  << " Coll: " << f.colls_transmitted   << " Carrier: " << f.carrier_transmitted << " Compressed: " << f.compressed_transmitted;
    }
    

    Die beiden .h kommen sich wohl irgendwie in die quere?

    out schrieb:

    sysinfo.cpp

    #include "sysinfo.h"
    #include "io.h" // wenn ich diese rein mache bei mir kennt der alles was ich in sysinfo.h deklariert hab nicht mehr
    #include <fstream>
    #include <iterator>
    
    void SYSInfo::read_dev()
    {
    	  std::ifstream file("/proc/net/dev");
    	  file >> skip_line; // Überspringe erste Zeile.
    	  file >> skip_line; // Überspringe zweite Zeile.
    	  for(face f; file>>f; dev.push_back(f));
    }
    
    void SYSInfo::table(){
    	  for(std::vector<face>::iterator it=dev.begin(); it!=dev.end(); ++it)
    		std::cout << '\n' << *it << '\n';
    }
    
    unsigned SYSInfo::getPacket(){
    	return dev[2].packets_received;  
    }
    
    std::vector< std::pair<std::string,unsigned> > SYSInfo::packets_received_all(){
    	  std::vector< std::pair<std::string,unsigned> > packets_received;
    	  for(std::vector<face>::iterator it=dev.begin(); it!=dev.end(); ++it)
    		packets_received.push_back( make_pair(it->name,it->packets_received) );
    	  return packets_received;
    }
    

    Dieser Fehler ist immer noch da.

    sysinfo.h:52:8: Fehler: zusätzliche Qualifizierung »exsystem::SYSInfo::« an Element »read_dev« [-fpermissive]
    


  • 🤡 Ersetzte #include "Test.h" durch #include "sysinfo.h"

    Keine Ahnung was exsystem:: sein soll. Die Qualifizierung brauchst du nicht, ich weiß auch nicht, wieso du das dazugeschrieben hast. :p



  • out schrieb:

    🤡 Ersetzte #include "Test.h" durch #include "sysinfo.h"

    Keine Ahnung was exsystem:: sein soll. Die Qualifizierung brauchst du nicht, ich weiß auch nicht, wieso du das dazugeschrieben hast. :p

    Ehm läuft das bei dir? Weil bei mir klappt es immer noch nicht! In der sysinfo.cpp ist nichts mehr deklariert. Meinst du es hilft das exsystem:: weg zu machen?



  • Ich kopiere alles, was ich vorhin gepostet habe, ersetzte #include "Test.h" durch #include "sysinfo.h" . Und es funktioniert. Mach einfach mal ein neues Projekt.



  • AHHHHH ..... dummer Fehler ^^ guck dir meine sysinfo.h an die ich oben gepostet hab.

    So weit so gut^^ ...

    sysinfo.cpp: In Funktion »int main()«:
    sysinfo.cpp:9:14: Fehler: keine passende Funktion für Aufruf von »SYSInfo::read_dev()«
    sysinfo.cpp:9:14: Anmerkung: Kandidat ist:
    ../sysinfo.h:52:8: Anmerkung: void SYSInfo::read_dev(std::vector<face>&)
    ../sysinfo.h:52:8: Anmerkung:   Kandidat erwartet 1 Argument, 0 angegeben
    sysinfo.cpp:10:11: Fehler: keine passende Funktion für Aufruf von »SYSInfo::table()
    

    main.cpp:

    #include <iostream> 
    
    #include "../sysinfo.h"
    
    using namespace std;
    
    int main(){ 
      SYSInfo a;
      a.read_dev(); 
      a.table(); 
      vector<pair<string,unsigned> > packets_received = a.packets_received_all();
      cout << "Packets recevied:" << endl;
      cout  << packets_received[0].first << ' ' << packets_received[0].second << endl;
      cout  << packets_received[1].first << ' ' << packets_received[1].second << endl;  
      cout  << packets_received[2].first << ' ' << packets_received[2].second << endl;
    }
    


  • Da stimmt etwas mit deinem Verzeichnis nicht. Wieso liegen sysinfo.h und sysinfo.cpp in unterschiedlichen Verzeichnissen?...

    sysinfo.cpp:9:14: Anmerkung: Kandidat ist:
    ../sysinfo.h:52:8: Anmerkung: void SYSInfo::read_dev(std::vector<face>&)



  • out schrieb:

    Da stimmt etwas mit deinem Verzeichnis nicht. Wieso liegen sysinfo.h und sysinfo.cpp in unterschiedlichen Verzeichnissen?...

    sysinfo.cpp:9:14: Anmerkung: Kandidat ist:
    ../sysinfo.h:52:8: Anmerkung: void SYSInfo::read_dev(std::vector<face>&)

    Das ist doch wurst solange ich das richtig inculde oben? liegt halt ein Ordner vorher.

    Nur ist jetzt irgendwo irgendwas nicht richtig verlinkt -.-:

    libexsystem.so: undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, face const&)'
    libexsystem.so: undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, face&)'
    libexsystem.so: undefined reference to `skip_line(std::basic_istream<char, std::char_traits<char> >&)'
    collect2: ld gab 1 als Ende-Status zurück
    


  • Enno schrieb:

    out schrieb:

    Da stimmt etwas mit deinem Verzeichnis nicht. Wieso liegen sysinfo.h und sysinfo.cpp in unterschiedlichen Verzeichnissen?...

    sysinfo.cpp:9:14: Anmerkung: Kandidat ist:
    ../sysinfo.h:52:8: Anmerkung: void SYSInfo::read_dev(std::vector<face>&)

    Das ist doch wurst solange ich das richtig inculde oben? liegt halt ein Ordner vorher.

    Auf jeden Fall gibt es die Funktion SYSInfo::read_dev(std::vector<face>&) nicht. Meine Funktion hat keinen Parameter. Du hast entweder falsch kopiert oder die Verzeichnisse stimmen nicht.

    Enno schrieb:

    Nur ist jetzt irgendwo irgendwas nicht richtig verlinkt -.-:

    libexsystem.so: undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, face const&)'
    libexsystem.so: undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, face&)'
    libexsystem.so: undefined reference to `skip_line(std::basic_istream<char, std::char_traits<char> >&)'
    collect2: ld gab 1 als Ende-Status zurück
    

    Keine Ahnung. :p



  • out schrieb:

    Keine Ahnung. :p

    Na komm, gib Dir mal ein bisschen Mühe.



  • out schrieb:

    Enno schrieb:

    out schrieb:

    Da stimmt etwas mit deinem Verzeichnis nicht. Wieso liegen sysinfo.h und sysinfo.cpp in unterschiedlichen Verzeichnissen?...

    sysinfo.cpp:9:14: Anmerkung: Kandidat ist:
    ../sysinfo.h:52:8: Anmerkung: void SYSInfo::read_dev(std::vector<face>&)

    Das ist doch wurst solange ich das richtig inculde oben? liegt halt ein Ordner vorher.

    Auf jeden Fall gibt es die Funktion SYSInfo::read_dev(std::vector<face>&) nicht. Meine Funktion hat keinen Parameter. Du hast entweder falsch kopiert oder die Verzeichnisse stimmen nicht.

    Enno schrieb:

    Nur ist jetzt irgendwo irgendwas nicht richtig verlinkt -.-:

    libexsystem.so: undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, face const&)'
    libexsystem.so: undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, face&)'
    libexsystem.so: undefined reference to `skip_line(std::basic_istream<char, std::char_traits<char> >&)'
    collect2: ld gab 1 als Ende-Status zurück
    

    Keine Ahnung. :p

    Tja ... ich kopiere nicht! Das mit dem Parameter ist mir auch aufgefallen! Ich lerne durch abschreiben mehr da ich Fehler mache! Wichtig!
    Naja w/e jetzt NUR noch das linking Problem lösen und es dürfte laufen! ^^ :p



  • Enno schrieb:

    Ich lerne durch abschreiben mehr da ich Fehler mache! Wichtig!

    Genau, der Lernfortschritt ist ja auch unübersehbar ...



  • Belli schrieb:

    Enno schrieb:

    Ich lerne durch abschreiben mehr da ich Fehler mache! Wichtig!

    Genau, der Lernfortschritt ist ja auch unübersehbar ...

    jaja Hass mich ruhig



  • Enno schrieb:

    Tja ... ich kopiere nicht! Das mit dem Parameter ist mir auch aufgefallen! Ich lerne durch abschreiben mehr da ich Fehler mache! Wichtig!
    Naja w/e jetzt NUR noch das linking Problem lösen und es dürfte laufen! ^^ :p

    Achso ist das:D Der Linkerfehler kommt, wenn etwas Deklariert aber nicht Definiert ist. Musst du mal schauen.



  • Enno schrieb:

    jaja Hass mich ruhig

    Warum sollte ich? Ich amüsier mich hier köstlich.



  • Belli schrieb:

    Enno schrieb:

    jaja Hass mich ruhig

    Warum sollte ich? Ich amüsier mich hier köstlich.

    @Belli
    Dann ist ja gut! 😃 Du weißt wahrscheinlich genau was es ist und es ist bestimmt etwas mega dummes!

    Ich hab auch gar kein Plan warum. -.- Hab alle Dateien in einen Ordner gemacht hab alles eben noch mal Kopiert von dir out aber hilft nichts.



  • Wie kompilierst du denn das Zeug. Hast du eine IDE?



  • Enno schrieb:

    @Belli
    Dann ist ja gut! 😃 Du weißt wahrscheinlich genau was es ist

    Nee, seit ich gemerkt habe, dass Dir hier kaum zu helfen ist, weil Dir die einfachsten Grundlagen fehlen, verfolge ich nur noch die verzweifelten Versuche eines Einzelnen, Dich irgendwie dahin zu bringen, wo Du hin willst, ohne mir Code, Problemstellungen oder so was anzusehen.


Anmelden zum Antworten