überladener operator << funktioniert nicht mehr...
-
drakon schrieb:
Zeig mal her, was du geändet hast. (Hast du das auch mal probiert rückgängig zu machen?).
naja, das kann ich hier nicht posten, das umfasst das halbe projekt... rückgängig machen geht nicht mehr, das war zu viel. aber das waren änderungen, die die klassen und operatoren, die hier im spiel sind nicht im entferntesten betreffen. achso, doch, die klasse, in deren methode ich den std::cout << bla code drinnen hab, der jetzt nicht mehr kompiliert, war vorher 'ne nested class, jetzt ist sie keine mehr. aber das hat ja auch nichts damit zu tun.
drakon schrieb:
Ansonsten auch einfach mal probieren neu erstellen.
meinst du damit 'nen rebuild? hab ich schon versucht, auch ein clean project bzw. neustart von msvs. wenn ichs neu reintippen würd, würd ich die funktion wieder genauso schreiben, daher versprech' ich mir dadurch nicht viel erfolg...

unskilled schrieb:
klammern und semikoli obendrüber sind alle noch korrekt?!
jap, der rest baut und läuft problemlos.

-
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?