Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
07.10.2002, 14:53
Gnomo



Hi!
Ich bin nun von der Autorenversion von VC++ auf Dev C++ \ MingW32 umgestiegen, weil ich mit der Autorenversion weder .exe noch source veröffentlichen darf. Nun sind da aber einige Compilierfehler, die ich nicht verstehe:
Quellcode:
29 D:\Own Projects\Necro Engine\includes\necLogFile.h
base class `CApplication' has incomplete type

Weiß jemand was das zu bedeuten hat?

PS: Sorry, dass ich euch mit sowas nerven muss. ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
001
07.10.2002, 15:31
Kriz



Scheint so, als ob irgendwas in CApplication fehlt (Abschließendes Semikolon am Blockende der Klasse oso)... Aber so genau weiß ich das auch nicht, weil ich VC++ benutze.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
002
07.10.2002, 15:36
Gnomo



Nein, sowas kann es net sein, das habe ich überprüft.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
07.10.2002, 15:38
Kriz



Dann poste mal die Definition von CApplication.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
004
07.10.2002, 16:18
Gnomo



Das ist die Definition von CApplication:
Quellcode:
class CApplication {
public:
    HINSTANCE                m_hInst;
    HWND                    m_hWnd;

protected:
    bool                    m_bdone;
    CRenderSystem          *m_oRenderSystem;    

private:
    char                   *m_chWinmainclass;
    char                   *m_chWintitle;
    MSG                        m_uMsg;

public:
    CApplication                        ( void );
    CApplication                        ( char *winmainclass, char *wintitle );
    ~CApplication                        ( void );

    void        ProgramInit                ( void );
    LRESULT        ProgramShutdown            ( void );
    LRESULT        ProgramMainLoop            ( void );

protected:

private:
    bool        CreateApp                ( void );
    bool        DestroyApp                ( void );
    bool        CreateWin                ( void );
    bool        DestroyWin                ( void );    
    void        ProgramUpdate            ( void );
    bool        RegisterWin                ( void );
    friend        LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam,
                                         LPARAM lParam);
};

Und in dieser Klasse tritt der Fehler auf:
Quellcode:
class CRenderSystem : public CApplication { <------------Hier tritt der Fehler auf
public:
    HGLRC       m_hRC;
    HDC         m_hDC;
    
protected:

private:
    bool        m_fullscreen;
    int         m_screenwidth;
    int         m_screenheight;
    int         m_pixeldepth;

public:
    CRenderSystem                   ( void );
    CRenderSystem                   ( bool fullscreen, int screenw, int screenh, int pixeldepth );
    ~CRenderSystem                  ( void );
    
    bool        InitOgl             ( void );
    bool        DrawOglScene        ( void );
    bool        ShutdownOgl         ( void );

protected:

private:
    int         SetupPixelFormat    ( void );
    bool        SetupOpenGL         ( void );
    void        SizeOglWin          ( int screenw, int screenh );
    void        SetFullscreen       ( void );
    void        EndFullscreen       ( void );
    void        StartFrame          ( void );
    void        EndFrame            ( void );
};

--

zum Seitenanfang zum Seitenende Profil || Suche
005
08.10.2002, 15:01
Gnomo



Hat niemand ne Ahnung was ich falsch gemacht habe?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
08.10.2002, 20:04
Sccar



class CRenderSystem : public class CApplication

is nur so ne vermutung, aber versuchs mal

sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
007
09.10.2002, 08:49
Kriz



Nee, daß ist es nicht, Sccar. Ein doofer Anfängerfehler ist es:

Du deklarierst in CApplication eine Instanz von CRenderSystem, obwohl CRenderSystem erst später definiert wird in Abhängigkeit von CApplication. Das geht nicht. Du kannst nicht CRenderSystem in CApplication deklarieren, wenn CRenderSystem nicht schon VOR CApplication bekannt ist. Da aber CRenderSystem von CApplication abgeleitet ist, MUSS logischerweise CRenderSystem NACH CApplication definiert werden. Ein in sich ausschließendes Paradoxum ist das Ergebnis...

Auf deutsch: Du hast Bullshit gecodet =)

Eine Lösung kann ich dir nicht sagen, weil ich nicht weiß, wieso du CRenderSystem als Elementvariable in CApplication haben willst und wieso dann CRenderSystem gleichzeitig von CApplication abgeleitet sein soll...

Wenn du nämlich die CRenderSystem-Instanz in CApplication auskommentierst, müsste es problemlos an dieser Codestelle kompilieren.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
008
09.10.2002, 09:02
Tron



Zitat:
CRenderSystem *m_oRenderSystem;

ich denke mal, kriz, du beziehst dich auf diese zeile.
da das nur ein zeiger ist laesst sich das mit einer simplem vorwaerts-deklaration beheben:
einfach ein class CRendersystem; vor die deklaration von CApplication setzen, somit ist das symbol CRendersystem bekannt und kann als zeiger verwendet werden (NICHT als instanz, da die groese noch nicht bekannt ist)

aber die sache stinkt, wenn eine klasse ihre eigene kindklasse kennen muss, dann ist das ein gravierender designfehler.

<heiliger krieg>
das * gehoert zum typ und nicht zur namen
kriz hat wohl den * uebersehen, sonst haette er bestimmt auch eine vorwaerts-deklaration vorgeschlagen.

und wenn ich grade dabei bin... *G*
eine { gehoert auf eine eigene zeile

Quellcode:class bla
{
  public:
    bla();
    virtual ~bla();

  private:
    int* blubb;
};

</heiliger krieg>

das jetzt _bitte_ nicht ganz so ernst nehmen, das ist _meine_ meinung und _meine_ eerfahrung, dass es besser lesbar ist.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 09.10.2002 um 09:03 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
09.10.2002, 11:54
Kriz



Nein, ich habe den Zeiger auf CRenderSystem schon gesehen. Wenn CRenderSystem nicht von CApplication abgeleitet wäre, hätte ich die Prototypisierung auch vorgeschlagen =)

Quellcode:
class CApplication;
class CRenderSystem;

class CApplication
{
    // Bla bla bla inkl. CRenderSystem* m_oRenderSystem;
};

class CRenderSystem
{
...
};

Ich hab des Problemsche scho erkannt ;)

@DP: Aktivier endlich mal [cpp], Kerl!

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 09.10.2002 um 11:55 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
09.10.2002, 15:37
Tron



die vorwaertsdeklaration von CApplication ist unnoetig.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
011
09.10.2002, 16:29
Gnomo



Hmm.. Wäre schön wenn es daran liegen würde aber ich habe schon eine vorwärtsdeklaration von CRenderSystem. Daran kanns net liegen. Wenn ihr wollt kann ich die ganze header datei posten.

--

zum Seitenanfang zum Seitenende Profil || Suche
012
10.10.2002, 18:07
Gnomo



Ich habe schon alles versucht, aber es klappt immer noch nicht. Was kann ich noch tun?

--

zum Seitenanfang zum Seitenende Profil || Suche
013
10.10.2002, 19:58
Kriz



Mann! Gnomo!

Du kannst nicht gleichzeitig CRenderSystem von CApplication ableiten und gleichzeitig in CApplication einen Zeiger auf CRenderSystem setzen!!!

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
014
10.10.2002, 20:03
Gnomo



Ja, ok aber wie kann ich das Problem dann lösen. Ich will ja ´ne vernünftige Klassenherachie aufbauen. Was kann ich stattdessen machen?

--

zum Seitenanfang zum Seitenende Profil || Suche
015
10.10.2002, 20:08
Kriz



Zuerst einmal schließen sich CRenderSystem und CApplication gegenseitig aus:

CRenderSystem ist KEINE Applikation (eine Applikation ist das Programm an sich). Daher sollte CRenderSystem auch nicht von CApplication abgeleitet werden, sondern als eigener Klassenzweig arbeiten. Wenn du dann VOR CApplication dann CRenderSystem definierst (oder prototypisierst), dann darfst du deinen Zeiger auf in CApplication setzen, denn das RenderSystem ist ja Bestandteil der Applikation:

class CRenderSystem;

class CApplication { ... };
class CRenderSystem { ... };

So in etwa.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
016
10.10.2002, 20:27
Tron



da hast recht, eine application ist kein rendersystem, zudem ist eine application auch kein fenster (wegen HWND ...)
aber das sind designentscheidungen und hat nichts damit zu tun, dass das nicht kompiliert.

das mit der vorwaerts deklaration (oder prototyp wie du es nennst) habe ich bereits weiter oben vorgeschlagen, das allein schein es ja nicht gewesen zu sein, wir brauchen wohl noch etwas mehr umgebung um diesen programmschnipsel

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
017
11.10.2002, 13:09
Gnomo



Nun gut. Ich habe das nun verstanden. Ich werde dann mal eine Umstrukturierung der Engine vornehme. Danke für eure Hilfe.

--

zum Seitenanfang zum Seitenende Profil || Suche
018
11.10.2002, 16:56
dp
Administrator


Zitat:
Kriz postete
@DP: Aktivier endlich mal [cpp], Kerl![/i]

hi kriz,

wenn die neue vers raus ist bau ichs evtl ein (frisst gut cpu), vorher hats leider kein sinn.

achso, krieg: der * gehört natürlich zum namen und net zum typ :)

--


Dieser Beitrag wurde am 11.10.2002 um 16:57 von Darth Paul bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
019
11.10.2002, 18:01
Kriz



Nö, der gehört zum Typ. Heißt ja schließlich "Zeiger auf Typ" und net "Zeiger auf Variablenname" :D

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche