gpt4 book ai didi

c++ - 错误 C2504 : 'BASECLASS' : base class undefined

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:23 24 4
gpt4 key购买 nike

我查看了一个与此类似的帖子,但链接不同,问题从未得到解决。我的问题是,出于某种原因,链接器期望有一个基类的定义,但基类只是一个接口(interface)。以下是完整的错误

c:\users\numerical25\desktop\intro todirectx\godfiles\gxrendermanager\gxrendermanager\gxrendermanager\gxdx.h(2) : error C2504: 'GXRenderer' : base class undefined

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

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

在GxRenderManager的顶部,有GXRenderer、windows、GXDX、GXGL headers。我假设将它们全部包含在本文档中。它们都相互链接,就好像它们都在同一份文档中一样。如果我错了请纠正我,因为这就是 View 标题的方式。继续……

GXRenderer.h

class GXRenderer {

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

};

GXGL.h

class GXGL: public GXRenderer {

public:
void Render();
void StartUp();
};

GXDX.h

class GXDX: public GXRenderer {
public:
void Render();
void StartUp();
};

分别是GXGL.cpp和GXDX.cpp

#include "GXGL.h"

void GXGL::Render()
{

}

void GXGL::StartUp()
{

}

//...Next document

#include "GXDX.h"


void GXDX::Render()
{

}

void GXDX::StartUp()
{

}

不确定发生了什么。我认为这是我链接文档的方式,我不确定。

最佳答案

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

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

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

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

在每个头文件的顶部你应该有#pragma once

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

关于c++ - 错误 C2504 : 'BASECLASS' : base class undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3053739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com