Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量<;类别*>;编译器错误214344302238_C++_Vector - Fatal编程技术网

C++ 向量<;类别*>;编译器错误214344302238

C++ 向量<;类别*>;编译器错误214344302238,c++,vector,C++,Vector,大家好,提前谢谢你们的帮助。我有一个类,它在编译时抛出了一个错误,在这里我取消了指针向量 我有一个引擎类,我想托管存储在vector sceneList中的多个场景对象,然后将其传递给SceneBase指针 #pragma once #include "Matrix3D.h" #include "SceneBase.h" #include <vector> class Engine { public: static float deltaTime; Engine

大家好,提前谢谢你们的帮助。我有一个类,它在编译时抛出了一个错误,在这里我取消了指针向量

我有一个引擎类,我想托管存储在vector sceneList中的多个场景对象,然后将其传递给SceneBase指针

#pragma once

#include "Matrix3D.h"
#include "SceneBase.h"
#include <vector>

class Engine
{
public:
    static float deltaTime;

    Engine();
    ~Engine();

    void Init(int argc, char* argv[]);
    void Run();

    /* Forward declared GLUT callbacks registered by main. */
    static void Display();
    static void Update();
    static void Keyboard(unsigned char c, int x, int y);
    static void Resize(int width, int height);
    static Matrix3D perspective;

private:
    //static SceneBase *scene;
    static float previousTime;  
    vector<SceneBase*> scenesList;
};
#pragma一次
#包括“矩阵3d.h”
#包括“SceneBase.h”
#包括
类引擎
{
公众:
静态浮动三角洲;
引擎();
~Engine();
void Init(int argc,char*argv[]);
无效运行();
/*由main注册的前向声明的GLUT回调*/
静态无效显示();
静态无效更新();
静态无效键盘(无符号字符c、整数x、整数y);
静态空心调整大小(整型宽度、整型高度);
静态矩阵三维透视;
私人:
//静态场景库*场景;
静态浮动时间;
矢量场景列表;
};
对于以下每个错误代码2143、4430、2238,行抛出三个错误代码。 另外,我还有下面的头文件,它还实现了一个指针向量,这些指针不会抛出任何错误

#pragma once

#include "OpenGLRenderer.h"
#include "BaseObject.h"
#include "TextureManager.h"
#include <vector>
#include <iostream>
#include "Engine.h"
#include "Matrix3D.h"

using namespace std; 

class SceneBase
{
public:
    SceneBase();
    virtual ~SceneBase();

    virtual void Init() = 0;
    virtual void Draw() = 0;
    virtual void Update() = 0;

protected:
    //List holding all objects in scene
    vector<BaseObject*> list;

    OpenGLRenderer rendererGL;
    TextureManager textureManager;
};
#pragma一次
#包括“OpenGLRenderer.h”
#包括“BaseObject.h”
#包括“TextureManager.h”
#包括
#包括
#包括“发动机.h”
#包括“矩阵3d.h”
使用名称空间std;
类场景库
{
公众:
场景基();
虚拟~SceneBase();
虚拟void Init()=0;
虚空绘制()=0;
虚拟void Update()=0;
受保护的:
//包含场景中所有对象的列表
向量表;
opengl渲染器;
纹理管理器纹理管理器;
};
在Engine.h上,如果我更改矢量场景列表;到std::vector scenesList;不会抛出错误2143,但会抛出所有其他错误。有人能指出我遗漏了什么吗?为什么这在SceneBase.h上有效而在Engine.h上无效


谢谢

您的两个标题文件SceneBase.hEngine.h相互包含,这是错误的。在头文件中使用转发声明,这样您就有了如下内容:

在a.h中

class b;

class a
{
// class a stuff goes here
}
class a;
class b
{
// class b stuff goes here
}
在b.h中

class b;

class a
{
// class a stuff goes here
}
class a;
class b
{
// class b stuff goes here
}

.cpp文件中,您可以安全地包含这些文件

您必须指定编译器以及它具体给出的错误。不同编译器之间的错误和错误代码不同