Приведенный ниже код используется как часть торговой функции, в которой отображается список свойств и используемые типы в свойствах, которыми они хотят торговать.
«Ошибка определения местоположения при нарушении прав доступа» возникает в переменной propertyName, когда пользователь вводит несуществующее свойство (выполняется блок catch), а затем вводит допустимое свойство.
Я не понимаю, почему он выдает эту ошибку, я думаю, это то, что я сделал в блоке catch с getline или рекурсией, которую я не могу решить.
функция торговли игрока
void player::trade(player &tradePlayer){
***
//code extract
cout << "What properties would you like from " << tradePlayer.getPlayerName() << " ? (Enter done when finished selecting)" << endl;
string propertyName;
vector<properties> theirProperties;
int theirCash;
ws(cin);
getline(cin, propertyName); //gets property name
while (propertyName != "done") {
theirProperties.push_back(tradePlayer.getOwnedProperty(propertyName));
getline(cin, propertyName); **Access violation appears here**
}
***
класс игрока - getOwnedProperty ()
class player
{
public:
***
//code extract
properties &getOwnedProperty(string name) {
try {
for (int i = 0; i < ownedProperties.size(); i++) {
if (ownedProperties.at(i).getProperty() == name) {
return ownedProperties.at(i);
}
}
throw exception();
}
catch (exception){
cout << "Property name not recognised! Try again." << endl;
ws(cin);
getline(cin, name);
getOwnedProperty(name);
}
}
***
}