将 std::vector 与结构一起使用时出现不完整的类型错误
Posted
技术标签:
【中文标题】将 std::vector 与结构一起使用时出现不完整的类型错误【英文标题】:Incomplete type error when using std::vector with structs 【发布时间】:2016-01-31 06:32:23 【问题描述】:我正在使用 c++ STL 向量,并且有一个名为 projectileList 的结构向量。 我正在尝试遍历该向量,在迭代时获取和设置 struts 中的值,但是我的代码拒绝编译,出现错误“不允许使用不完整类型。”
谁能指出我做错了什么:
代码:
项目处理程序.h:
#include "stdafx.h"
#include "DataTypes.h"
#include <vector>
class ProjectileHandeler
private:
int activeObjects;
std::vector<projectile> projectileList;
void projectileUpdater();
public:
ProjectileHandeler(projectile* input[], int projectileCount);
~ProjectileHandeler();
;
#endif
projectileHandeler.cpp
#include "stdafx.h"
#include "DataTypes.h"
#include "ProjectHandeler.h"
#include <vector>
ProjectileHandeler::ProjectileHandeler(projectile* input[], int projectileCount)
for (int i = 0; i < projectileCount; i++)
projectileList.push_back(*input[i]);
activeObjects += 1;
//NO extra slots. Not that expensive.
projectileList.resize(projectileList.size());
void ProjectileHandeler::projectileUpdater()
while (true)
for (unsigned int i = 0; i < projectileList.size(); i++)
if (projectileList[i].isEditing == true)
break;
【问题讨论】:
将*projectileList[i].isEditing
更改为projectileList[i].isEditing
缺少分号。投票关闭作为简单的印刷错误。
请贴出真实代码
由于一直无法解决错误而更新了完整代码。
【参考方案1】:
这编译得很好(在这里测试过:http://codepad.org/cWn6MPJq):
#include <vector>
struct projectile
bool isEditing;
;
class ProjectileHandeler
private:
std::vector<projectile> projectileList;
void projectileUpdater()
//This bit loops to infinity and beyond! ...or at least untill the handeler is destroyed.
while (true)
for (unsigned int i = 0; i < projectileList.size(); i++)
if (projectileList[i].isEditing == true) //Throws Incomplete type error
break;
;
int main()
注意*
的删除、循环变量的正确类型以及额外类说明符的删除。
【讨论】:
谢谢。那里有额外的类说明符,因为实际代码在标头和源之间拆分。更新了循环变量并删除了指针(我现在看到了那个错误,干杯,) if (projectileList[i].isEditing == true) 现在抛出错误:“.isEditing 的左边必须是类/结构/联合。 如果此时结构未知,则当您将不同文件中的 sn-ps 剪切并粘贴到问题中时,问题可能会丢失。我的 sn-p 编译良好(见链接)。您是否包含声明您的类实现所在的结构的标题?以上是关于将 std::vector 与结构一起使用时出现不完整的类型错误的主要内容,如果未能解决你的问题,请参考以下文章
OpenGL:将 VBO 与 std::vector 一起使用
运行时错误:将 .push_back() 与 std::vector 一起使用时访问冲突?