Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.11.2005, 14:27 Titel: public Klasse und Basisklasse undefiniert |
|
|
Ich habe 2 header Dateien. Zum einen CESceneManager.h:
CPP: | // CESceneNode.h: Schnittstelle für die Klasse CESceneNode.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CESCENENODE_H__DDB95A56_1FF1_41E0_BEE0_6925BF1B9EED__INCLUDED_)
#define AFX_CESCENENODE_H__DDB95A56_1FF1_41E0_BEE0_6925BF1B9EED__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CESceneManager.h"
#include <list>
namespace Core
{
class CESceneManager;
class CESceneNode : public CESceneManager
{
public:
CESceneNode();
virtual ~CESceneNode();
void AddNode(char* cTest);
void UpdateNodes(void);
protected:
// std::list<CESceneNode*> m_lstNodes;
char m_cTest[1024];
};
};
#endif // !defined(AFX_CESCENENODE_H__DDB95A56_1FF1_41E0_BEE0_6925BF1B9EED__INCLUDED_)
|
und
CPP: | // CESceneNode.h: Schnittstelle für die Klasse CESceneNode.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CESCENENODE_H__DDB95A56_1FF1_41E0_BEE0_6925BF1B9EED__INCLUDED_)
#define AFX_CESCENENODE_H__DDB95A56_1FF1_41E0_BEE0_6925BF1B9EED__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CESceneManager.h"
#include <list>
namespace Core
{
class CESceneManager;
class CESceneNode : public CESceneManager
{
public:
CESceneNode();
virtual ~CESceneNode();
void AddNode(char* cTest);
void UpdateNodes(void);
protected:
// std::list<CESceneNode*> m_lstNodes;
char m_cTest[1024];
};
};
#endif // !defined(AFX_CESCENENODE_H__DDB95A56_1FF1_41E0_BEE0_6925BF1B9EED__INCLUDED_)
|
Soweit nichts wildes. Beim kompilieren bekomme ich jedesmal error C2504: 'CESceneManager' : Basisklasse undefiniert
obwohl doch die Klasse CESceneManager eigentlich bekannt sein müsste..?!?!
Danke schonmal für Hilfe!!! _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 01.11.2005, 14:57 Titel: |
|
|
Hast du schonmal versucht die Forward-Deklarationen wegzulassen? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
Dragon Super JLI'ler

Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 01.11.2005, 14:59 Titel: |
|
|
CPP: | [...]
namespace Core
{
class CESceneManager;
class CESceneNode : public CESceneManager
{
public: [...]
|
Du hast es doch schon als Include eingebunden, also warum diese Zeile
Edit: F***, da war jemand schneller  _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.11.2005, 15:07 Titel: |
|
|
Hatte ich auch erst gedacht, ist aber nicht so, selbst wenn die Forward-Deklaration draußen ist, kommt der Fehler... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 01.11.2005, 15:32 Titel: |
|
|
CPP: | Core::CESceneManager | ? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 01.11.2005, 15:38 Titel: |
|
|
@schneidi: O_o, bin ich blind oder hast du zweimal den gleichen Code gepostet? Ich kann atm jedenfalls keinen Unterschied finden. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.11.2005, 15:42 Titel: |
|
|
Lol, ich nehme an, du hast unbeabsichtigt 2x denselben Header gepostet.
Kann sein, dass ich mich täusche, aber eine Vorwärtsdeklaration, dürfte doch nicht mit einer Definition gleichzusetzen sein.
Ein Funktionsprototyp ist ja auch lediglich eine Deklaration und noch keine Definition.
In diesem Falle hätte der Compiler recht, die Klasse ist nicht definiert, lediglich deklariert.
Aber keine Gewähr für Richtigkeit.
Irgendwo erscheint mir das Verhalten des Compilers auch logisch.
(Der Compiler kann beim konstruieren der abgeleiteten Klasse ja noch nichts konkretes über die Basisklasse wissen, was er theoretisch aber müsste. ) |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.11.2005, 15:45 Titel: |
|
|
Hups tatsächlich... ich depp...
Hier der richtige Code der SceneManager Klasse:
CPP: | // CESceneManager.h: Schnittstelle für die Klasse CESceneManager.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CESCENEMANAGER_H__F3AD16CF_966B_4A3D_BEDE_959E0B3161F9__INCLUDED_)
#define AFX_CESCENEMANAGER_H__F3AD16CF_966B_4A3D_BEDE_959E0B3161F9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CESceneNode.h"
#include "LogFile.h"
#include <list>
#include <vector>
#include <assert.h>
namespace Core
{
class CESceneNode;
typedef std::list<CESceneNode*> SceneNode;
class CESceneManager
{
public:
CESceneManager();
virtual ~CESceneManager();
void AddTestNode(CESceneNode* pChild);
void GetNumNodes(void);
void UpdateAllNodes(void);
CLogFile m_Log;
protected:
// std::vector<CESceneNode*> m_vecSceneNode;
SceneNode m_vecSceneNode;
CESceneNode* m_pRoot;
};
};
#endif // !defined(AFX_CESCENEMANAGER_H__F3AD16CF_966B_4A3D_BEDE_959E0B3161F9__INCLUDED_)
|
Kommt vermutlich daher, das ich sehr gefrustet bin von dem Ding
@Greven: denke das ist durch meinen missglückten post etwas undeutlich geworden, aber ich inlude ja die Klasse SceneManager, wo die ganze Deklarationsgeschichte drin ist... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.11.2005, 16:02 Titel: |
|
|
Liegt sicher an den namespace, die Teile sind sau gefährlich und machen nur Probleme in der kombo Quell&Header Datei, wenn es geht vermeide das.
Zu deinem Problem: erstelle mal kleine testklassen ohne besonderheiten daran lässt sich ein solcher Fehler viel einfacher finden. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.11.2005, 16:09 Titel: |
|
|
Leider war's das auch nicht Greven, hab die ganzen namespaces rausgemacht (war zum Glück nur in den 2 Klassen, da ich das wie du schon sagst, zum testen noch recht klein gehalten habe).
Funkt aber trotz allem nicht... gleicher Fehler... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.11.2005, 16:11 Titel: |
|
|
Glaube nicht das es an den Namespaces liegt. Habe eigentlich auch noch nie Probleme damit gehabt, dennoch solltest du dir angewöhnen, bei eigenen Typen immer den kompletten Namensraum mit anzugeben.
Bsp.:
CPP: | class CESceneNode : public Core::CESceneManager |
Das Zugreifen auf den globalen Namespace würde ich mir aber zumindest bei Funktionsdeklaration verkneifen, VC macht da Ärger.
Ich denke, es liegt viel eher daran, dass du Instanzen deiner SceneNode-Klasse in deiner Manager-Klasse verwendest, jedoch SceneNodes von Manager ableitest.
Spricht zwar eigentlich nichts dagegen, aber leuchtet mir ein, dass das beim kompilieren nicht ganz unproblematisch ist.
Eigentlich müsstest du dir das Einbinden der 'CESceneNode.h' in deiner 'CESceneManager.h' sparen können. |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.11.2005, 16:12 Titel: |
|
|
Was genau ist:
Code: | SceneNode m_vecSceneNode; |
? _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 01.11.2005, 16:13 Titel: |
|
|
Fallen hat Folgendes geschrieben: | Was genau ist:
Code: | SceneNode m_vecSceneNode; |
? |
CPP: | typedef std::list<CESceneNode*> SceneNode; |  |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.11.2005, 16:18 Titel: |
|
|
richtig....  _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 01.11.2005, 19:28 Titel: |
|
|
Was ich sehr lustig finde:
wenn ich class als friend mit einbinde, kennt er sie seltsamerweise. Nur mit dem public scheiterts....
Ich glaub ich töte gleich meinen PC....  _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
|