2016-10-23 4 views
3

저는 C++을 처음 접했고 구조체를 배열에 저장하는 문제에 봉착했습니다. 나는 이미 이것에 관해서 보드를 수색했지만, 아무도 나의 특정한 문제를 가지고있는 것처럼 보이지 않는다.구조체를 배열로 저장 (C++)

동적 인 마법 주문이 필요한 텍스트 기반 RPG 게임을 만들고 있습니다. 스펠은과 같이 정의, 구조체입니다 : -

struct spell 
{ 
    std::string mSpellName; 
    int mRequiredMagicPoints; 
}; 

그때 생성하고 구조체의 두 인스턴스 초기화 : -, 나는이 두 개의 인스턴스를 저장하려고) (주에서, 그리고

spell fireBall {"Fire Ball", 10}; 
spell magicMissile {"Magic Missile", 5}; 

을 벡터 배열 : -

int main() 
{ 
    std::vector<spell> mSpells[2]; 

    mSpells[0] = fireBall; 
    mSpells[1] = magicMissile; 
} 

그러나, 엑스 코드는 "아니오 가능한 오버로드 '='"

나는 하 나 소리 질러 및 읽기 또한 이러한 구조체를 기존 동적 배열에 저장하려고 시도했지만 여전히 컴파일되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

미리 감사드립니다.

+0

C는 C++은 C를 잘못 태그를 사용하지 마십시오 아니다 없습니다. – Olaf

+1

어쩌면 당신은'std :: vector mSpells (2);', 2 요소의 벡터를 의미했을 수도 있습니다. 실제로 쓴 것은 두 개의 빈 벡터 배열입니다. –

+0

['push_back'] (http://www.cplusplus.com/reference/vector/vector/push_back/) –

답변

5

std::vector<spell> mSpells[2]; 벡터 배열을 정의합니다. 그것은 두 요소의 벡터 만 원한다고 생각합니다. 그래서 당신은 시작하지만 단지 벡터를 정의 :

std::vector<spell> mSpells; 

그런 다음 당신이 several options이 그것에 요소를 추가 :

mSpells.push_back(fireBall); 
mSpells.emplace_back("Magic Missile", 5); 
2

당신은 spell의 두 vector의 배열을 선언했다. 당신은 분명히 하나의 vector 원하는, 그래서 당신은 다음과 같은 말을합니다 :

vector<spell> mSpells(2); 

이 또한 두 개의 기본-구성 요소를 가지고 mSpells를 초기화합니다.

는 또한 기록 할 수 있습니다

vector<spell> mSpells; 
mSpells.reserve(2); // optional, good idea 
mSpells.push_back(fireBall); 
mSpells.push_back(magicMissile); 
관련 문제