2016-09-29 4 views
2

Я новичок в C++, и я пытаюсь сделать небольшую игру для подземелий подземелий. В настоящее время у меня есть несколько векторов, объявленных в моих заголовочных файлах, но они, похоже, дают несколько ошибок. Я попытался найти эту проблему в StackOverflow, но ответы действительно не работают.ERROR C2039: 'vector': не входит в 'std'

Вот один из моих файлов заголовка: (Hero.h)

#pragma once 

class Hero { 
public: 
    Hero(); 
    std::string name; 
    int experience; 
    int neededExperience; 
    int health; 
    int strength; 
    int level; 
    int speed; 
    std::vector<Item> items = std::vector<Item>(); 
    void levelUp(); 
private: 
}; 

Вот мой .cpp файл: (Hero.cpp)

#include "stdafx.h" 
#include <vector> 
#include "Hero.h" 
#include "Item.h" 

Hero::Hero() { 

} 
void Hero::levelUp() 
{ 

}; 

Как я сказал, что я новичок C++, поэтому в моем коде может быть намного больше ошибок, чем я знаю. Это просто тест.

Ниже приведены ошибки, которые показаны в списке ошибок в Visual Studio 2015:

Error C2039 'vector': is not a member of 'std' CPPAssessment hero.h 13 
Error C2143 syntax error: missing ';' before '<' CPPAssessment hero.h 13 
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int CPPAssessment hero.h 13 
Error C2238 unexpected token(s) preceding ';' hero.h 13 

ответ

6

Include <vector> в вашем Hero.h заголовка и рассмотреть его извлечения из Hero.cpp файл как упомянутых в комментариях ниже.

+1

Не слишком уверен в этом ответе. В файле cpp вектор включен до hero.h, так что все должно быть в порядке. То, что вы предлагаете, является хорошим советом, но, основываясь на информации OP, здесь это не проблема. Сказав это, такая ошибка почти всегда вызвана отсутствующим заголовком, поэтому может быть, что информация OP неверна. – paxdiablo

+0

@paxdiablo Правильно. Я собираюсь удалить этот ответ. –

+1

@paxdiablo Мы этого не знаем. Меня не удивит, если stdafx.h включает hero.h, заставляя его разбираться перед вектором. – hvd

3

std::vector<Item> items = std::vector<Item>(); объявляет полный тип.

Поэтому компилятор должен знать декларации о std::vector в этой точке (кроме всего прочего, это необходимо, чтобы установить время компиляции постоянной sizeof Hero анализ). Решение находится в #include <vector> в заголовке hero.h, не исходный файл.