Kommt nur murks raus
-
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?
-
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 einemanage_dev.cppund einemanage_dev.h
2. Dann hast du die Input/Output Funktionen. Dafür erstellst du eineio.hund eineio.cpp.
3. In derio.cppinkludierst du dannmanage_dev.hund in derio.hreicht eine Forwärtsdeklarationclass manage_dev;
4. In der main.cpp inkludierst du dannmanage_dev.hundio.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); #endifIch 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); #endifio.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(); }; #endifsysinfo.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. :pEhm 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ückKeine 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ückKeine 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! ^^ :pAchso 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?