Class inheritance problems
-
Hi! I can't derive my CBaseRenderer class from CD3DBase, here's my code:
#pragma once
class CD3DBase;
class CBaseRenderer : public CD3DBase
{
public:
CBaseRenderer(void);
~CBaseRenderer(void);public:
void OnLostDevice();
void OnResetDevice();
void OnFrameMove();
void OnRender();
void OnInitVolatileResources();
void OnFreeVolatileResources();
};and these are the errors:
------ Build started: Project: DXProject, Configuration: Release Win32 ------ Compiling... CBaseRenderer.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined DXProject.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined CD3DBase.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined CApplication.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined
What's wrong with this code? :( regards -
Hi! I can't derive my CBaseRenderer class from CD3DBase, here's my code:
#pragma once
class CD3DBase;
class CBaseRenderer : public CD3DBase
{
public:
CBaseRenderer(void);
~CBaseRenderer(void);public:
void OnLostDevice();
void OnResetDevice();
void OnFrameMove();
void OnRender();
void OnInitVolatileResources();
void OnFreeVolatileResources();
};and these are the errors:
------ Build started: Project: DXProject, Configuration: Release Win32 ------ Compiling... CBaseRenderer.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined DXProject.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined CD3DBase.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined CApplication.cpp e:\C++\DXProject\CBaseRenderer.h(7) : error C2504: 'CD3DBase' : base class undefined
What's wrong with this code? :( regards -
You must include the header for the definition of CD3DBase. If you are deriving from a class then it is not enough just to have a forward reference, you need the full class available.
-
Ok thanks, but if I include the header, I get even more errors, since CBaseRenderer and CD3DBase include each other, because CD3DBase needs to create an object of CBaseRenderer
-
Ok, next errors :-D
#pragma once
/* includes */
class CBaseRenderer;
class CD3DBase
{
/* ... */
private:
CBaseRenderer gRenderer;
};And here the errors:
e:\C++\DXProject\CD3DBase.h(46) : error C2079: 'CD3DBase::gRenderer' uses undefined class 'CBaseRenderer
-
Ok, next errors :-D
#pragma once
/* includes */
class CBaseRenderer;
class CD3DBase
{
/* ... */
private:
CBaseRenderer gRenderer;
};And here the errors:
e:\C++\DXProject\CD3DBase.h(46) : error C2079: 'CD3DBase::gRenderer' uses undefined class 'CBaseRenderer
You're missing
#include "BaseRenderer.h"
or you can makegRenderer
a pointer.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
-
You're missing
#include "BaseRenderer.h"
or you can makegRenderer
a pointer.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
tried both. this eliminated all errors, except that now I get this one again:
e:\C++\DXProject\CBaseRenderer.h(5) : error C2504: 'CD3DBase' : base class undefined
#pragma once
#include "CD3DBase.h"class CBaseRenderer : public CD3DBase
{ ...but well...since I only need a pointer to an IDirect3DDevice9 from CD3DBase, I might also create a function to pass this one as a parameter and make CBaseRender not to inherit from CD3DBase.
-
tried both. this eliminated all errors, except that now I get this one again:
e:\C++\DXProject\CBaseRenderer.h(5) : error C2504: 'CD3DBase' : base class undefined
#pragma once
#include "CD3DBase.h"class CBaseRenderer : public CD3DBase
{ ...but well...since I only need a pointer to an IDirect3DDevice9 from CD3DBase, I might also create a function to pass this one as a parameter and make CBaseRender not to inherit from CD3DBase.