错误C2504:'BASECLASS':基类未定义

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)

下面的代码显示了标题如何相互链接

GXRenderManager.h

#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标题.我假设把它们全部包含在这份文件中.它们都相互链接,好像它们都在同一个文档中.如果我错了,请纠正我,因为这是一个视图标题.继续...

GXRenderer.h

class GXRenderer {

public:
    virtual void Render() = 0;
    virtual void StartUp() = 0;

};
Run Code Online (Sandbox Code Playgroud)

GXGL.h

class GXGL: public GXRenderer {

public:
    void Render();
    void StartUp();
};
Run Code Online (Sandbox Code Playgroud)

GXDX.h

class GXDX: public GXRenderer {
public:
    void Render();
    void StartUp();
};
Run Code Online (Sandbox Code Playgroud)

分别为GXGL.cpp和GXDX.cpp

#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)

不知道最近发生了什么.我认为我如何链接文件,我不确定.

Bri*_*ndy 4

问题是您需要#include "GXRenderer.h"在两者的顶部都有:GXGL.h 和 GXDX.h。

必须在定义派生类型之前定义基类型,而不仅仅是声明。

顺便说一句,该错误是编译错误而不是链接错误。

编辑:关于您的类类型重新定义:

在每个头文件的顶部,您应该有#pragma once.

#pragma once指令指定编译器在构建中最多包含一次该文件。