将 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 一起使用时访问冲突?

从 dll 导出 std::vector 时出现链接错误

将 std::vector 与类一起使用时的 C++ 读写问题

使用 gprof 分析我的代码时出现不一致

当C ++将元素从函数的返回值存储到std :: vector时出现意外的结果