Я объект в моем коде называется «schemeList», который выглядит следующим образом:C++ рекурсивно проходя по выпускам памяти параметра
class scheme;
class schemeList
{
friend class scheme;
private:
scheme * head;
schemeList * tail;
public:
schemeList();
Token addScheme(vector <Token> &toAdd);
//...other functions
};
Функция У меня проблема с это «addScheme», который, как предполагается, чтобы добавить схему в голову, или, если полная голова, добавьте ее в хвост (в виде связанного списка). Вот эта функция у меня до сих пор:
Token schemeList::addScheme(vector<Token>& toAdd)
{
if (head->retCloseParen() != ')')
{
scheme * headCopy = head;
Token answer = head->addScheme(toAdd);
head = headCopy;
return answer;
}
else
{
//deal with tail
schemeList * arrow = this;
while (arrow->tail != NULL)
{
arrow = arrow->tail;
}
tail = new schemeList();
tail->head= new scheme();
tail->tail = NULL;
Token answer = arrow->tail->addScheme(toAdd);
return answer;
}
}
Это прекрасно работает для добавления первой схемы, но вторая схема выдает ошибку, которая говорит «Неизвестное исключение ...». Раньше у меня была такая проблема, но я исправил ее, передав переменную toAdd
по ссылке вместо передачи всего объекта. Почему это бросает ошибку и/или как ее исправить?
В случае это делает вещи более ясно, схема является:
class scheme
{
friend class identifierList;
public:
Token * id;
char openParen;
char closeParen;
identifierList * idList;
scheme();
//other functions
};
class identifierList
{
friend class scheme;
public:
Token * id;
identifierList * next;
identifierList(Token * inId, identifierList * inNext);
};
И лексема:
class Token
{
friend class datalogProgram;
public:
int lineNumber;
string type;
string value;
Token(string inType, string inValue, int inLineNum);
//other functions
};
Вы должны использовать 'std :: list' или' std :: vector', а не тратить время на переустановку связанного списка. –
Показать реализацию 'schem :: addScheme'. И стек вызовов, где вы получаете исключение. – Paul