2016-01-31 5 views
-2

Я работаю с векторами STL C++ и имею вектор структур, называемый projectileList. Я пытаюсь выполнить итерацию по вектору, получая и устанавливая значения в struts при повторении, но мой код отказывается компилироваться, а ошибка «Недостаточный тип недопустим».Ошибка неполного типа при использовании std :: vector with structs

Может кто-нибудь, пожалуйста, указать на то, что я делаю неправильно:

Код:

ProjectHandeler.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; 
     } 
    } 

} 
+1

изменить '* projectileList [i] .isEditing' to' projectileList [i] .isEditing' – billz

+0

Отсутствует точка с запятой. Проголосовал за закрытие простой типографской ошибки. –

+0

Отправьте реальный код –

ответ

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() 
{ 
} 

Обратите внимание на удаление *, правильный тип переменной цикла и удаление дополнительного спецификатора класса.

+0

Спасибо за это. Дополнительные спецификаторы класса там, потому что фактический код разделяется между заголовком и источником. Обновив цикл и удалив указатель (я вижу эту ошибку сейчас, приветствует), if (projectileList [i] .isEditing == true) теперь выдает ошибку: «слева от .isEditing должно быть class/struct/union. –

+0

Если структура неизвестна в этот момент, возможно, проблема будет потеряна при вырезании и вставке фрагментов из разных файлов в вопрос. Мой фрагмент компилируется отлично (см. Ссылку). Вы включаете заголовок, объявляющий структуру, в которой реализована ваша реализация класса? – Martin

+0

Обновлен с полным кодом –

Смежные вопросы