У меня есть шаблон класса карты, в котором я храню свой общий тип данных. Я должен использовать строки для индексации класса карты. При попытке получить доступ к неинициализированному элементу мне нужно исключить неинициализированное исключение. Основной выглядит следующим образом:Исключения C++ с неиспользованными переменными
mapClass <double> mc;
mc[”aaa”] = 3.5;
double var1 = mc[“aaa”];
cout << var1 << endl; //print 3.5
try{
double var2 = mc[“aab”]; //uninitialized error: throw exception
}catch(classMap<double>::Uninitialized&){
cout<< ”Uninitialized error…..”<<endl;
}
Моя идея заключается в том, чтобы создать класс узла внутри шаблона mapClass, который будет хранить ключ (строка) и значение элементов (Т). Я выполнил перегрузку operator [], которая вернет ссылку на элемент T. Эта перегрузка operator [] также будет push_back новыми элементами, если данная строка не существует внутри вектора.
template< typename T >
class mapClass{
public:
class Uninitialized{};
class Node{
public:
string key;
T value;
bool asigned;
Node(){
key = "";
asigned = false;
}
~Node(){}
};
mapClass(){
initialized=false;
max=0;
}
T& operator[](string a){
int ret;
bool out = false;
if (!initialized){
Node newNode;
nodeArray.push_back(newNode);
nodeArray[0].key = a;
initialized = true;
max = 0;
ret = 0;
}
else{
for (int i = 0; i <= max; i++){
if (nodeArray[i].key == a){
out = true;
ret = i;
}
}
if (!out){
max++;
ret = max;
Node newNode;
nodeArray.push_back(newNode);
nodeArray[max].key = a;
}
}
return nodeArray[ret].value;
}
private:
vector<Node> nodeArray;
bool initialized;
int max;
};
В данный момент программа выводит значение 3.5, но также выводит значение (которая перемещается вокруг -8578623) вместо того, чтобы выбросить исключение. Проблема в том, что я не знаю, в какой части кода я должен использовать исключение, и я не знаю, как проверить, не является ли переменная неинициализирована. Буду признателен за любую помощь.
Итак, где ваш «бросок»? –
Вы знаете, что вы можете подавить всю логику 'nodeArray [max]', просто используя 'nodeArray.back()' после вашего push-back. – WhozCraig