cout in Headerdatei?
-
Hallo allerseits,
kann ich kein cout in einer Headerdatei verwenden?
Ich habe eine Klasse, die nur aus einem .h File besteht (muss mich nochmal einlesen, was da der Vorteil ist), sie besteht hauptsächlich aus Settern und Gettern.
Nun hab ich einen Setter setXYZ(const ULONG abc) { setLocal(abc); };
Wenn ich nun vor setLocal(abc), welches ne private Methode ist, die die Werte entgegennimmt ein cout << "TEST: " << abc << "\n"; mache, erscheint der nie, obwohl setXYZ gerufen wird!Geht das denn nicht?
Mein eigentliches Problem ist ein anderes, will es durch die cout-Ausgaben versuchen zu analysieren!
Danke schon mal
Ciao!
-
Reth schrieb:
kann ich kein cout in einer Headerdatei verwenden?
Ja, wenn du <iostream> eingebunden hast.
Ich habe eine Klasse, die nur aus einem .h File besteht (muss mich nochmal einlesen, was da der Vorteil ist)
Kann mir keine wirklichen Vorteile vorstellen. Ich mach das nur wenn ich dazu gezwungen bin (bei Verwendung von Templates). Hört sich aber im konkreten Fall von dir nicht nach Templates an, rate also davon ab.
Nun hab ich einen Setter setXYZ(const ULONG abc) { setLocal(abc); };
Wenn ich nun vor setLocal(abc), welches ne private Methode ist, die die Werte entgegennimmt ein cout << "TEST: " << abc << "\n"; mache, erscheint der nie, obwohl setXYZ gerufen wird!Lass mal etwas Code sehen, das funktioniert bei richtiger Anwendung sehrwohl

Mein eigentliches Problem ist ein anderes, will es durch die cout-Ausgaben versuchen zu analysieren!
Dafür benützt man einen Debugger, wenn du das Visual Studio benützt findest du einen exzellenten Artikel über den Debugger in unserem Magazin

MfG SideWinder
-
Verwende den GCC und hab mich noch nicht in den gdb eingearbeitet.
Momentan debugge ich beruflich auch sehr viel mit Logausgaben (Webandwendungen).Habe Stream.h eingebunden. Bin dabei gestern noch auf was gestoßen, was ich mal gelesen hab, aber nicht mehr weiss: Ich binde string mittels <string> ein und das tut, bei stream gehts aber nicht.
Aber das nur nebenbei.
Das mit dem cout muss wirklich gehen, da ich es im korrespondierenden Getter auch verwende und dort tut es. Also aus irgendeinem Grund wird der Setter nicht gerufen oder tut nicht. Bekomme allerdings weder einen Comilier-, noch einen Linker- noch einen LAufzeitfehler.
Code kann ich momentan nicht posten, wird nachgereicht, wenn ich mal wieder am anderen Rechner sitze.
Ciao
Reth
-
C++ streams finden sich in
#include <iostream> // standard IO #include <fstream> // File IOmein Standard Fehler in so einem Fall ist :
#include <iostream> class a { public: void set_it( int i ) {;} }; class b : public a { public: void set_it( int i ) { std::cout << "set_it() called" << std::endl; } }; int main() { a * pb = new b; pb->set_it( 3 ); }Wenn du set_it() in a virtuell machst dann geht's.
Keine Ahnung ob das bei dir zutrifft. Ich mach den Fehler jedenfalls ziemlich oft.
Kurt
-
Das kann bei mir eigentlich nicht das Problem sein, da die Klasse von keiner anderen erbt.
Hier mal der Codeausschnitt:
#ifndef WINDOWDATA_H #define WINDOWDATA_H #include <stream.h> ... #include "ScreenC.h" extern const struct TagItem tagEnd; class WindowDataC { public: WindowDataC() : flagsIDCMP(0) {} ~WindowDataC() {} void setScreen(const ScreenC& screen) { cout << "WINDOWDATA SET SCREEN: " << screen.getScreenStruct() << "\n"; addTagItem(WA_PubScreen, (ULONG)screen.getScreenStruct()); scr = screen.getScreenStruct();} ... const struct Screen * const getScreen() const { cout << "WINDOWDATA GET SCREEN: " << scr << "\n"; return scr; } private: const struct Screen *scr; ... }; #endifAufruf im Hauptprogramm:
WindowDataC data; data.setScreen(screen); window.open(data);Das Screenobjekt ist erzeugt und initialisiert, die entsprechende Methode in seiner Headerdatei ist private, aber WindowDataC ist als Friendclass angegeben:
const struct Screen * const getScreenStruct() const { return screen; }Später wird dann in window der Getter gerufen.
Das cout im Getter kommt, das im Setter nicht!
Warum?Das Problem liegt sicher an anderer Stelle, oder?
-
Nun hats doch geklappt!
Anscheined hatte ich eine benötigte Datei nicht neu compiliert und gelinkt!?