überladener operator << funktioniert nicht mehr...
-
dann wirst du wohl nicht drum rumkommen, im main-file bestimmte dinge auszukommentieren und dann nach und nach erst die includes zuzuschalten - dann wirst du merken, in welchem file du iwas vergessen hast - und das hast du definitiv ^^
bb
-
also ich hab rausgefunden, dass es daran liegt, dass ich das hier inkludiere:
#ifndef __HPTIME_H__ #define __HPTIME_H__ #include <ostream> #include <windows.h> namespace bla { class HPTime { private: ... public: friend HPTime operator - ( HPTime &left, HPTime &right ); friend std::ostream &operator << ( std::ostream &out, const HPTime &time ); }; inline HPTime operator - ( HPTime &left, HPTime &right ) { return HPTime( left.startCntr.QuadPart - right.startCntr.QuadPart ); } inline std::ostream &operator << ( std::ostream &out, const HPTime &time ) { out << time.getTimeMilliSeconds() << "ms"; return out; } } #endifwenn ich den operator <<, der in diesem file definiert ist, auskommentiere, dann funktioniert der andere. fällt euch da was auf?
-
iko79 schrieb:
wenn ich den operator <<, der in diesem file definiert ist, auskommentiere, dann funktioniert der andere. fällt euch da was auf?
Jopp - da fehlt ne Klammer... Aber das hatte ich dir schon davor gesagt

bb
-
erm... wo denn?
-
o sry - hatte die scrollbar net gesehen, der kam ja noch x)
-
unskilled schrieb:
o sry - hatte die scrollbar net gesehen, der kam ja noch x)

-
@drakon: ie hat es auf 125% gezoomt und dadurch war die klammer gerade so nicht mehr zu sehen
^^dann poste ma die komplette datei - oder guck davor mal, ob du vll ausversehen irgend nen bezeichner gewählt hast, der in der winapi durch nen makro scho vergeben ist
oder du guckst mal, ob du versehentlich die gleichen include-guards verwendet hast, weil du iwas per copy&paste übernommen hast und vergessen hast, die zu ändern...
mehr ideen hab ich jz au net
btw:
auf so ne include-guards:__HPTIME_H__solltest du verzichten und lieber bezeichner ohne unterstrich(e) am anfang verwenden, da die für den compiler resveriert sind...bb
PS:
inlinemusst du bei sowas net mehr davorschreiben und op- nutzt eigtl intern IMMER den op-= - sieht dann so aus:HPTime operator - (const HPTime &left, const HPTime &right) //const ! { HPTime tmp (left); tmp -= right; return tmp; }natürlich musst du deiner klasse dann auch nen operator -= spendieren, aber das sollte net so das prob sein und der sollte eigtl so und so schon existieren...
je nach geschmack kannst du die letzten beiden zeilen auch zusammenfassen
was zwar auch noch unter geschmack fällt, aber eigtl immer so gemacht wird: die parameter heißen lhs und rhs (left hand side / right hand side)bb
-
ich glaub inzwischen, dass das ein scope-problem ist und der compiler versucht, auf einen komplett anderen datentyp zu casten... mir ist da nämlich vorhin an anderer stelle sowas ähnliches aufgefallen. muss mir das morgen nochmal genauer ansehen.
und, hey, danke für das
unskilled schrieb:
auf so ne include-guards: __HPTIME_H__ solltest du verzichten
und das
unskilled schrieb:
inline musst du bei sowas net mehr davorschreiben
und das
unskilled schrieb:
op- nutzt eigtl intern IMMER den op-=
!
wusst ich nicht, thx!
-
np - für sowas ist das forum ja da

bb
-
also ich hatte die operatoren ja erst im namespace bla. ich hätte jetzt versucht, die in den globalen namespace herauszuziehen, schaff' das aber nicht ganz.
wenn ich das so anschreib
namespace bla { class HPTime { ... friend bla::HPTime operator - ( bla::HPTime &left, bla::HPTime &right ); friend std::ostream &operator << ( std::ostream &out, const bla::HPTime &time ); }; } inline bla::HPTime operator - ( bla::HPTime &left, bla::HPTime &right ) { return bla::HPTime( left.startCntr.QuadPart - right.startCntr.QuadPart ); } inline std::ostream &operator << ( std::ostream &out, const bla::HPTime &time ) { out << time.getTimeMilliSeconds() << "ms"; return out; }dann beschwert sich der compiler, dass die operatoren nicht auf private members zugreifen dürfen. (???) versteh ich nicht ganz, die signatur ist ja komplett gleich. meine annahme war jetzt, dass ich den bereichsauflösungsoperator für die friend deklarationen angeben muss. das einzige, das ich mir als syntaktisch korrekt vorstellen kann ist sowas hier:
friend bla::HPTime ::operator - ( bla::HPTime &left, bla::HPTime &right );dann bekomm' ich allerdings den fehler hier: "missing type specifier - int assumed." wie geb' ich 'nen bereichsauflösungsoperator für operatoren an?