C++ C++;将类作为函数参数传递时出现不完整的类型错误

C++ C++;将类作为函数参数传递时出现不完整的类型错误,c++,C++,我试图在头文件中使用以下代码来定义一个类和一个函数,该类和函数将指向该类的指针向量作为参数。然而,在编译时,我得到一个不完整的类型错误 #ifndef OBJECTS_H #define OBJECTS_H #include <glm/glm.hpp> #include <vector> struct Shape { glm::vec3 emission; float shininess;

我试图在头文件中使用以下代码来定义一个类和一个函数,该类和函数将指向该类的指针向量作为参数。然而,在编译时,我得到一个不完整的类型错误

    #ifndef OBJECTS_H
    #define OBJECTS_H

    #include <glm/glm.hpp>
    #include <vector>

    struct Shape {
        glm::vec3 emission;
        float shininess;
        glm::vec3 Ka;
        glm::vec3 Ks;
        glm::vec3 Kd;

        Shape(glm::vec3 emission, float shininess, glm::vec3 Ka, glm::vec3 Ks, glm::vec3 Kd);
        float intersects(const glm::vec4 start, const glm::vec4 direction);
        virtual glm::vec4 randomPoint();
        virtual glm::vec4 getNormal(const glm::vec4 &p);
        virtual bool isLight();
    };

    void LoadModel(vector<Shape *> &scene, const char *path);

    #endif
\ifndef对象
#定义对象
#包括
#包括
结构形状{
glm::vec3发射;
浮光;
glm::vec3ka;
glm::vec3ks;
glm::vec3kd;
形状(glm::vec3发射,浮光度,glm::vec3 Ka,glm::vec3 Ks,glm::vec3 Kd);
浮点相交(常量glm::vec4开始,常量glm::vec4方向);
虚拟glm::vec4 randomPoint();
虚拟glm::vec4 getNormal(常量glm::vec4&p);
虚拟布尔孤岛();
};
void LoadModel(向量和场景,常量字符*路径);
#恩迪夫
给出错误:

error: incomplete type is not allowed
      void LoadModel(vector<Shape *> &scene, const char *path);
错误:不允许使用不完整的类型
void LoadModel(向量和场景,常量字符*路径);

为什么会发生此错误,以及编写此代码的正确方法是什么?

更改函数声明以正确定义
std::vector

void LoadModel(std::vector<Shape *> &scene, const char *path);
void加载模型(std::vector&scene,const char*path);

如果这不能解决问题,那么错误是关于
Shape
。如果函数需要访问其任何数据成员,则需要确保在定义函数
LoadModel
时,编译器具有类
Shape
的完整定义。

向量与所有其他标准库容器一样,位于
std
命名空间中。因此,您应该将其称为
std::vector
,因为您没有使用名称空间std的行

当我遇到这些看似模糊的错误时,我会尝试在代码的几个附加版本中消除复杂性

在本例中,我将在出现问题的函数声明之前创建几个附加函数声明:


LoadShape(Shape,const char*);
LoadShape(向量,常量字符*);


这将为
向量
参数显示相同的错误,提供线索。。。显然,
char
不会是一个不完整的类型,因此问题在于
vector
,一般来说,我在使用STL类型时的错误与命名空间问题或模板相关的巫毒有关。

乍一看,代码没有错。旁注:您使用虚拟函数和指向基类的指针。必须添加虚拟析构函数了!它的
std::vector
。为什么不进行任何调试?这将导致您将问题缩小到“vector”一词,而不必询问。哈,STL容器实际上位于全局名称空间中。我不知道您在说什么。如果查看cplusplus.com,向量位于
std
命名空间中。请参阅。我也不相信我在cplusplus.com上找到的任何东西。我在cplusplus.com上的信息从来没有任何问题。这是我所知道的最接近官方参考网站的东西,而不是阅读标准。如果你想纠正我使用STL引用标准库的错误,你可以从一开始就告诉我,而不是说容器在全局名称空间中。事实上,没有“官方”参考网站,但我们中的许多人使用cppreference.com。