num*_*l25 6 c c++ visual-studio-2008 visual-studio visual-c++
我检查了一个类似于此的帖子,但链接不同,问题从未得到解决.我的问题是,由于某种原因链接器期望有基类的定义,但基类只是一个接口.以下是整个错误
c:\users\numerical25\desktop\intro todirectx\godfiles\gxrendermanager\gxrendermanager\gxrendermanager\gxdx.h(2) : error C2504: 'GXRenderer' : base class undefined
Run Code Online (Sandbox Code Playgroud)
下面的代码显示了标题如何相互链接
#ifndef GXRM
#define GXRM
#include <windows.h>
#include "GXRenderer.h"
#include "GXDX.h"
#include "GXGL.h"
enum GXDEVICE {
DIRECTX,
OPENGL
};
class GXRenderManager {
public:
static int Ignite(GXDEVICE);
private:
static GXRenderer *renderDevice;
};
#endif
Run Code Online (Sandbox Code Playgroud)
在GxRenderManager的顶部,有GXRenderer,windows,GXDX,GXGL标题.我假设把它们全部包含在这份文件中.它们都相互链接,好像它们都在同一个文档中.如果我错了,请纠正我,因为这是一个视图标题.继续...
class GXRenderer {
public:
virtual void Render() = 0;
virtual void StartUp() = 0;
};
Run Code Online (Sandbox Code Playgroud)
class GXGL: public GXRenderer {
public:
void Render();
void StartUp();
};
Run Code Online (Sandbox Code Playgroud)
class GXDX: public GXRenderer {
public:
void Render();
void StartUp();
};
Run Code Online (Sandbox Code Playgroud)
#include "GXGL.h"
void GXGL::Render()
{
}
void GXGL::StartUp()
{
}
//...Next document
#include "GXDX.h"
void GXDX::Render()
{
}
void GXDX::StartUp()
{
}
Run Code Online (Sandbox Code Playgroud)
不知道最近发生了什么.我认为我如何链接文件,我不确定.
问题是您需要#include "GXRenderer.h"
在两者的顶部都有:GXGL.h 和 GXDX.h。
必须在定义派生类型之前定义基类型,而不仅仅是声明。
顺便说一句,该错误是编译错误而不是链接错误。
编辑:关于您的类类型重新定义:
在每个头文件的顶部,您应该有#pragma once
.
该#pragma once
指令指定编译器在构建中最多包含一次该文件。