我正在製作一個類似流氓的ASCII遊戲,並創建了一個名爲「Armor」的結構,我想在結構中使用name變量來獲取名稱所在的路徑。如何在它定義的同一個結構中使用一個變量?
struct Armor {
bool equipped;
std::string name;
int getBuff(int buff) {
std::fstream item;
std::string line;
std::string response;
std::string value;
item.open("../Data/Items/" + name + ".item", std::fstream::in);
if (item.fail())
errorQuit("ERROR: There was a problem loading armor type .ITEM file."); // Error and quit function
while (!item.eof()) {
getline(item, line);
response = split(line, '=', 0); // Splits string
if (response == "buff" + std::to_string(buff)) {
value = split(line, '=', 1);
break;
}
}
item.close();
return std::stoi(value);
}
};
然後我把它叫做是這樣的:
Armor sword;
sword.name = "Wooden Sword";
int buff = sword.getBuff(1);
但是,這將引發未處理的異常錯誤。 我改變了它,所以getBuff需要2個參數,int buff和std :: string itemName。並用itemName替換路徑中的名稱; 後來我試着給它這樣的:
Armor sword;
sword.name = "Wooden Sword";
int buff = sword.getBuff(1, sword.name);
但是,這將引發同樣的錯誤。
我很困惑,爲什麼我不能使用名稱變量,因爲它已經被定義。有沒有其他的方式可以像這樣使用名稱變量?
問題不在於變量'name'。 – deviantfan
文件內容是否重要?如果是,請提供內容或使用stringstream對其進行模擬。如果不是,則刪除該部分以接近最小示例。另外,變量名稱在編譯爲二進制代碼後不再存在,但運行二進制代碼時引發異常,所以您猜測變量名稱可能是相關的,這是沒有根據的。 –
分割功能是做什麼的?請發佈它的代碼。 –