0
我在我的代碼的對象稱爲「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'而不是浪費時間重新創建鏈表。 –
顯示你的'scheme :: addScheme'實現。和你得到例外的調用堆棧。 – Paul