我一直在編程的冒險遊戲,並擁有一切整個二維數組地牢工作,直到運動。地圖是他們自己的結構,而角色是一個類。 Character類的成員變量之一是Map,curMap
,它表示玩家當前所在的地圖。但是,在Main.cpp中進行測試時,作品和地圖沒有正確更新。這是代碼,之後我會解釋我已經完成了什麼。C++ - 類不更新成員正確
Maps.h
#include <string>
#include <vector>
using namespace std;
struct Map {
vector<string> layout;
vector<int> exits; //indices in allMaps array
string name;
int level;
Map();
Map(vector<string> l, vector<int> e, string n, int lvl);
};
extern Map noMap;
extern Map highashPlainsA, highashPlainsB, highashPlainsC; //Highash Plains
extern Map alnwick, alnwickForge, alnwickMarket, alnwickInn; //Alnwick
extern vector<Map> allMaps;
extern vector<string> blankLayout;
extern vector<string> plainsLayoutA, plainsLayoutB, plainsLayoutC; //Highash Plains
extern vector<string> alnwickLayout; //Major Towns
extern vector<string> forgeLayout, marketLayout, innLayout; //Town Buildings
Maps.cpp
#include "Maps.h"
Map::Map() :
layout(blankLayout),
exits({0, 0, 0, 0}),
name("_NO_MAP_"),
level(0){}
Map::Map(vector<string> l, vector<int> e, string n, int lvl) :
layout(l),
exits(e),
name(n),
level(lvl){}
Map noMap = Map();
Map highashPlainsA = Map(plainsLayoutA, {4, 3, 2}, "Highash Plains A", 1);
vector<Map> allMaps = {noMap, highashPlainsA};
vector<string> blankLayout =
{"##############################",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"##############################"};
vector<string> plainsLayoutA =
{"##########################33##",
"# G ##### ####### E #### 2",
"# # # D # # G # 2",
"# # # ## ####################",
"# # ##E# # G G#",
"#E# G# G G#",
"# # ##########E############",
"# #### #DE G ED#",
"# ###D #DE G ED#",
"################111###########"};
Character.h(我切出了很多不重要的代碼在這裏)
#include "Maps.h"
#include <iostream>
class Character {
Map curMap;
public:
Character();
~Character();
void SetMap(Map map);
Map GetMap();
};
extern Character player;
Character.cpp(左明表示不重要的代碼在這裏也一樣)
#include "Character.h"
Character::Character() : curMap(highashPlainsA){}
Character::~Character(){}
void Character::SetMap(Map map){
cout << "OLD MAP NAME: " << curMap.name << "\n";
curMap = map;
curMap.layout = map.layout;
curMap.exits = map.exits;
curMap.name = map.name;
curMap.level = map.level;
cout << "NEW MAP NAME: " << curMap.name << "\n";
}
Map Character::GetMap(){
return curMap;
}
Character player = Character();
Main.cpp的
#include "Character.h"
int main(){
player.SetMap(highashPlainsA);
cout << "\nSIZE OF CURRENT LAYOUT: " << player.GetMap().layout.size() << "\n";
cout << "SIZE OF PLAINS A: " << plainsLayoutA.size() << "\n";
cout << "Name of map: " << player.GetMap().name << "\n";
// cout << "Layout of map: \n" << player.GetMap().layout[0] << "\n" << player.GetMap().layout[1] << "\n" << player.GetMap().layout[2] << "\n"<< player.GetMap().layout[3] << "\n"; // Crashes because for whatever reason the layout size is 0
return 0;
}
什麼已經過測試: 在Character::SetMap()
我甚至嘗試改變各個體變量,但不應該將Map設置爲整體來更改所有這些值?此外,在Map::Map(vector<string> l, vector<int> e, string n, int lvl)
,我試過它沒有初始化列表,但它仍然無法正常工作。我並沒有真正期待它,但我猜這值得一試。
的問題:
控制檯輸出:
OLD MAP NAME: Highash Plains A
NEW MAP NAME: Highash Plains A
SIZE OF CURRENT LAYOUT: 0
SIZE OF PLAINS A: 10
Name of map: Highash Plains A
的字符類確實初始化curMap
成員,並調用默認的構造函數這樣做。這是預期的功能,因爲在安裝過程中播放器所處的地圖無關緊要。然而,在嘗試設置映射到另一個預先創建地圖實例(使用SetMap()
,一切都從那裏順心。按照控制檯記錄,的curMap
名稱設置爲正確的名稱(OLD地圖名稱),並保持這一套時。新的地圖可是,佈局而日誌的目標載體的直接尺寸給出了正確的值返回一個空向量到底是怎麼回事,我怎麼能解決這個問題
歡迎計算器.COM。請花些時間閱讀[幫助頁面](http://stackoverflow.com/help),尤其是名爲[「我可以問些什麼話題?」](http://stackoverflow.com/help/討論話題)和[「我應該避免問什麼類型的問題?」](http://stackoverflow.com/help/dont-ask)。也請[tour](http:// stackoverflow。com/tour)並閱讀[如何提出好問題](http://stackoverflow.com/help/how-to-ask)。最後,請學習如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Weaboo
雖然您提供了很多信息,但您並未給出一個最小完整的可驗證示例。此代碼不能編譯,所以我們不能簡單地重現您的問題。 – JHBonarius
目前還不清楚你的實際問題是什麼,因爲有很多不重要的信息,沒有足夠的重要信息。哪種方法不符合您的預期? 'SetMap'? – jwimberley