Als ich heute an diesem wunderschönen Morgen (grau und Regen) aufstand und mich an eine kleines Projekt machen wollte, merkte ich, dass ich wiedereinmal den Wald vor Lauter Bäumen nicht sehe ...
Ich versuche aus Gründen der Einfachheit mehrere Klassen untereinander zu verlinken.
Dazu habe ich eine Klasse (cKernel) die auf alle Klassen referenziert und auf die alle Klassen referenzieren.
Das funktioniert auch wunderbar, nur kann ich leider, sofern ich der Kernelklasse eine der andere übergeben habe, nicht darauf zugreifen ...
Es folgen die Codes der Datei (alles unwichtige weggelassen),
Folgendes bezieht sich nur auf die Referenzierunf von Kernel und MainFrame, da der Fehler bei allen anderen Klassen derselbe ist.
main.cpp
#include "kernel/kernel.h"
#include "mainFrame/mainFrame.h"
bool cApp::OnInit()
{
// create the kernel
cKernel *Kernel = new cKernel();
// create default frame
cMainFrame *MainFrame = new cMainFrame(_T(LangFourWinsServer), wxPoint(0, 0), wxSize(WindowSizeX, WindowSizeY));
MainFrame->Show(TRUE);
Kernel->RegisterMainFrame(MainFrame);
// set the default window
SetTopWindow(MainFrame);
return true;
}
Alles anzeigen
kernel.h
#ifndef _FILE_KERNEL_H
#define _FILE_KERNEL_H
class cMainFrame;
class cKernel
{
public:
cMainFrame *MainFrame;
void RegisterMainFrame(cMainFrame *MainFrame);
};
#endif // _FILE_KERNEL_H
Alles anzeigen
kernel.cpp
#include "kernel/kernel.h"
void cKernel::RegisterMainFrame(cMainFrame *MainFrame)
{
// register to the kernel
this->MainFrame = MainFrame;
MainFrame->OnFullScreen();
}
Alles anzeigen
mainFrame.h
#ifndef _FILE_MAIN_FRAME_H_
#define _FILE_MAIN_FRAME_H_
class cKernel;
class cMainFrame : public wxFrame
{
public:
cKernel *Kernel;
};
#endif // _FILE_MAIN_FRAME_H_
Alles anzeigen
Das ganze funktioniert auch relativ gut.
Allerdings bekomme ich bei dem Befehl MainFrame->OnFullScreen(); (Bei this->MainFrame->OnFullScreen(); passiert dasselbe.) folgende Ausgabe.
Zitat
kernel.cpp||In member function »void cKernel::RegisterMainFrame(cMainFrame*)« : |
kernel.cpp|72|Fehler: invalid use of undefined type »struct cMainFrame«|
kernel/kernel.h|34|Fehler: forward declaration of »struct cMainFrame«|
||=== Build finished: 2 errors, 0 warnings ===|
Wenn ich den obengenannten Befehl weglasse, wird es anstandslos kompiliert.
OS: Ubuntu Linux 64 Bit
IDE: Code::Blocks
FW: wxWidgets
GCC: 4.1.2-16ubuntu2 (gutys)
CPP: 4.1.2-16ubuntu2 (gutsy)
Hat jemand eine Idee, wie man das Problem lösen kann ??