将类作为函数参数传递时C++不完整的类型错误
C++ incomplete type error when passing class as function parameter
我正在尝试在头文件中使用以下代码来定义一个类和一个函数,该函数将指向该类的指针向量作为参数。但是,在编译时,我收到一个不完整的类型错误。
#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
给出错误:
error: incomplete type is not allowed
void LoadModel(vector<Shape *> &scene, const char *path);
为什么会发生此错误,编写此代码的正确方法是什么?
与所有其他标准库容器一样,向量位于std
命名空间中。因此,您应该将其称为std::vector
,因为您没有行using namespace std;
。
更改函数声明以正确限定std::vector
void LoadModel(std::vector<Shape *> &scene, const char *path);
如果这不能解决它,那么错误是关于Shape
.您需要确保在函数的定义LoadModel
编译器具有类Shape
的完整定义,如果该函数需要访问其任何数据成员。
当我遇到这些看似晦涩难懂的错误时,我会尝试消除代码的几个附加版本中的复杂性。
在这种情况下,我会在有问题的函数声明之前创建一些额外的函数声明:
LoadShape(Shape, const char*);
LoadShape(vector<char>, const char*);
这将为vector<char>
参数显示相同的错误,从而提供线索......显然char
不会是一个不完整的类型,所以问题出在vector
上,一般来说,我在使用 STL 类型时的错误与命名空间问题或与模板相关的 voodoo 有关。
相关文章:
- 我的模板类方法返回错误类型?
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- "auto"推断出 hashtable_policy.h 中的错误类型
- 设计自己的结果/两者之一:是否应该始终指定成功类型和错误类型
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- 不允许使用错误类型
- 当读取错误类型时,CIN覆盖我的初始化值
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 程序总是返回二进制'>>':找不到运算符,它采用错误类型的左操作数
- 错误:类型为 '.&' 来自类型的临时 '..*康斯特'
- 涉及将要馈送的向量转换为execvp的错误类型
- C++中是否存在错误类型