Zeitmessung multiple definitions of operator
-
Hallo Leute,
ich brauche eine Zeitmessung, um die Dauer von Funktionen testen zu können.
Dazu benutze ich das hier:
https://www.c-plusplus.net/forum/220704-fullZu meinem Problem habe ich das hier gefunden:
http://stackoverflow.com/questions/12802536/c-multiple-definitions-of-operatorDas hat mir aber nicht weitergeholfen.
Ich habe wie im Thread beschrieben, die operator Funktion ausgelagert in eine extra .cpp, aber jetzt bekomme ich folgendes:
timer.cpp:8:65: error: 'std::ostream& timer::operator<<(std::ostream&, const timer&)' must take exactly one argument
hier noch meine Funktionen:
timer.h
#ifndef TIMER_H #define TIMER_H /* includes */ #include <iostream> #include <string> #include <ctime> class timer { struct timespec ts_start, ts_end; clockid_t id; public: timer(clockid_t clock = CLOCK_MONOTONIC) { id = clock; } void start() { clock_gettime(id, &ts_start); } void stop() { clock_gettime(id, &ts_end); } friend std::ostream & operator<<(std::ostream& os, const timer &t); }; #endif /* TIMER_H */
timer.cpp
#include "timer.h" /* includes */ #include <iostream> #include <string> #include <ctime> std::ostream& timer::operator<<(std::ostream& os, const timer &t) { unsigned long ns = (t.ts_end.tv_sec - t.ts_start.tv_sec) * 1000000000 + t.ts_end.tv_nsec - t.ts_start.tv_nsec; std::string ext = "ns"; if (ns >= 10000) { ns /= 1000; ext = "us"; } if (ns >= 10000) { ns /= 1000; ext = "ms"; } if (ns >= 10000) { ns /= 1000; ext = "s"; } os << ns << " " << ext; return os; }
ich hoffe ich habe mich verständlich ausgedrückt und ihr könnt mir helfen
-
EDIT:
ich sollte vielleicht erwähnen, dass ich es zuerst auf einem Windows Rechner getestet habe, wo es super funktionierte.
Da ich es aber auf einer Linux-Hardware brauche, hab ich es jetzt auf einer Ubuntu VM getestet und da trat jetzt der Fehler auf
-
struct gadget{ friend std::ostream& operator<<(std::ostream&, const gadget&); }; // nicht gut: als Memberfunktion //std::ostream& gadget::operator<<(std::ostream& out, const gadget& g){ return out; } //gut: als freie Funktion std::ostream& operator<<(std::ostream& out, const gadget& g){ return out; }
-
Hallo,
danke für den Tipp
Hab ja nur copy paste gemacht.
Problem ist nur, dass egal, ob ich's als freidn, inline oder freie mache, dieser Fehler auftritt .... er aktzeptiert nur ein Argument
-
Bin_Unregistriert schrieb:
Hallo,
danke für den Tipp
Hab ja nur copy paste gemacht.
Problem ist nur, dass egal, ob ich's als freidn, inline oder freie mache, dieser Fehler auftritt .... er aktzeptiert nur ein Argument
Du siehst aber schon einen Unterschied zwischen den Zeilen 6 und 9 in meinem Beispiel? (Und ich meine nicht die // am Anfang.)
-
Hallo,
oh, hab ich komplett übersehen
EntschuldigeHab es gleich getestet und es funktioniert
Vielen Dank