2016-09-29 280 views
2

我是C++的新手,我試圖製作一個小地牢爬蟲遊戲。目前我有多個向量在我的頭文件中聲明,但他們似乎給出了多個錯誤。我試圖在StackOverflow上搜索這個問題,但答案似乎並不奏效。錯誤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

包括在你的Hero.h<vector>並考慮向Hero.cpp文件刪除它在下面的評論中提到。

+1

不太確定這個答案。在cpp文件中,vector.h在hero.h之前包含,所以它應該沒問題。你建議的是好的建議,但根據OP的信息,這裏不會有問題。話雖如此,這種錯誤幾乎總是由一個缺失的標題引起的,所以可能是OP的信息不正確。 – paxdiablo

+0

@paxdiablo你是對的。我要刪除這個答案。 – 2016-09-29 08:29:22

+1

@paxdiablo雖然我們不知道。如果stdafx.h包含hero.h,它不會讓我感到驚訝,導致它在vector之前被解析。 – hvd

3

std::vector<Item> items = std::vector<Item>();宣佈一個完整類型

因此編譯器需要知道聲明std::vector在這一點上(除其他事項外,它必須建立在編譯時評估常量sizeof Hero)。解決辦法是在hero.h的標頭#include <vector>,而不是的源文件中。

相關問題