Konflikt beim Header Einbinden

thekiller

Viceinator
Nabend,

ich bin gerade etwas in der Zwickmühle beim Einbinden von Headern.
Also folgedes ist gegeben.

Ich habe 2 Header ("Window.h" und "Button.h")

Beide Header beinhalten jeweils eine Klasse.
In Window.h habe ich Button.h includiert und wird auch schon in der Klasse verwendet.
Jetzt wollte ich Window.h in Button.h einbinden...Geht natürlich nicht weil sie sich ja dann gegenseitig einbinden würden.

Wie kann ich es jetzt am geschicktesten Lösen, wenn ich in Button.h auf Elemente von Window.h zugreifen möchte?
Jede einzelne Variable, Struktur etc. an Button zu übergeben find ich irgendwie "unschön"...

MfG Manuel
 
In Button.h wirst du nicht auf die Elemente der Klasse Window zugreifen können, jedoch sehrwohl in der Button.cpp nachdem da die window.h includiert wurde. Einfach über Vorwärtsdeklaration und Zeiger/Referenz

C++:
#ifndef _WINDOW_H
#define _WINDOW_H

#include "Button.h"

class Window
{
public:
   void AddButton(Button& button);
};

#endif

////////////////////////////////////////
#ifndef _BUTTON_H
#define _BUTTON_H

class Window;

class Button
{
public:
   void AddToWindow(Window& wnd);
};

#endif

//////////////////////////////////////////////////
// Button.cpp

#include "Button.h"
#include "Window.h"

void Button::AddToWindow(Window& wnd)
{
   wnd.AddButton(*this);
}
 
Hm das Funktioniert zwar aber so müsste ich ja auch für jeden Aufruf einer Methode in Button den Pointer von Window übergeben...Is auch irgendwie doof...
Muss ich mir wohl ne unabhängige Datenstruktur bauen mit der die benötigten Daten in einem Schlag an Button übergeben kann.
Ich muss ja nicht zwingend auf Methoden der Window Klasse zugreifen
 
Na ja, du kannst ja auch das Fenster als Member von Button speichern.
C++:
class Button
{
   Window& m_parent;
public:
   Button(Window& parent);
};

Aber darum herum wirst du nie kommen, irgendwo her muss ja der Button das Fenster kennen mit dem er kooperieren soll, Magie gibts da noch nicht ;)
 
Ja genau dass was du als Code eben eingefügt hast habe ich auch ausprobiert. Hatte aber den Absturz meiner Software zur Folge.
 
Zurück