gpt4 book ai didi

C++ 找不到类型定义?

转载 作者:行者123 更新时间:2023-11-28 07:04:50 28 4
gpt4 key购买 nike

所以,我大约一年前开始学习 C++,在此之前我学习了 Java C# 和 VB.NET。就像现在一样,我认为自己是一名高级 C++ 编码员。然而,有一件事我不太明白。链接过程。这就是问题所在。现在,我正在为游戏开发编写一个类似 XNA 的库,其中包含一个基本的组件系统 -但是我在构建它时遇到编译器错误,C++ 假装它不知道特定类型,在这种情况下,GameComponent 类不知道 ComponentSelector 类(反之亦然),尽管它已正确包含和键入。我将向您展示我的两个头文件,希望您能帮助我。

组件选择器.hpp:

#ifndef COMPONENTSELECTOR_HPP
#define COMPONENTSELECTOR_HPP
#include<sem/System/Types.hpp>
#include<sem/System/GameComponent.hpp>
#include<vector>
namespace sem
{
class ComponentSelector
{
public:
GameComponent* getComponent1(); //GameComponent does not name a type
GameComponent* getComponent2(); //GameComponent does not name a type
GameComponent* getComponent3(); //GameComponent does not name a type
void addComponent(GameComponent* item); //GameComponent does not name a type
void removeComponent1();
void removeComponent2();
void removeComponent3();
void clearList();
private:
std::vector<GameComponent*> m_Components;
protected:
};
}
#endif // COMPONENTSELECTOR_HPP

游戏组件.hpp:

#ifndef GAMECOMPONENT_HPP
#define GAMECOMPONENT_HPP

#include<sem/System/ComponentSelector.hpp>
#include <sem/System/Types.hpp>

namespace sem
{
class GameComponent
{
public:
virtual void load() = 0;
virtual void unload() = 0;
virtual void update() = 0;
virtual void draw() = 0;

ComponentSelector* m_Selector; //ComponentSelector does not name a type

SEMlong getID();
SEMstring getName();
SEMstring getType();
private:
SEMlong m_ComponentID;
SEMstring m_ComponentName;
SEMstring m_ComponentType;
protected:
};
}

#endif // GAMECOMPONENT_HPP

任何解决方案和提示将不胜感激。

最佳答案

您需要在 GameComponent 类声明中对类 ComponentSelector 进行前向声明:

// Remove this: #include<sem/System/ComponentSelector.hpp> 
#include <sem/System/Types.hpp>

namespace sem
{
class ComponentSelector; // Note the forward declaration added!

class GameComponent
{
// ...
ComponentSelector* m_Selector; // Compiles now!
// ...

我建议在 ComponentSelector 声明 header 中执行相同的操作,反之亦然。然后包括完整的类声明,您将在其中使用任何成员(这在编译单元中,即 .cpp - 通常是文件)。

关于C++ 找不到类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917161/

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