C++ 在抛出';标准:长度误差';what():基本\u字符串::\u S\u创建已中止
这是有问题的错误消息: 在抛出“std::length_error”实例后调用terminate what():基本字符串::\u S\u创建 流产 这是触发它的代码。 main.cpp文件中的此部分:C++ 在抛出';标准:长度误差';what():基本\u字符串::\u S\u创建已中止,c++,function,class,pointers,binary-search-tree,C++,Function,Class,Pointers,Binary Search Tree,这是有问题的错误消息: 在抛出“std::length_error”实例后调用terminate what():基本字符串::\u S\u创建 流产 这是触发它的代码。 main.cpp文件中的此部分: case '-': // DeleteItem try { int id; inputs >> id; Student s(
case '-': // DeleteItem
try
{
int id;
inputs >> id;
Student s(id, "NULL", "NULL");
cout << "DeleteItem('" << id << "') -- ";
s = tPtr->DeleteItem(s);
cout << "Deleted ";
s.Print();
}
case'-'://删除项
尝试
{
int-id;
输入>>id;
学生s(id,“空”、“空”);
cout leftPtr,treePtr->data);
}
}
coutrightPtr==NULL){
删除临时文件;
coutdata=getpreceptor(treePtr->leftPtr);
删除(treePtr->leftPtr,treePtr->data);
}
}
}
应该删除树Ptr,但它会打印出来
这是(随机数)。为什么?看起来您需要在
bTree::DeleteItem
中使用返回语句。请打开编译器警告。编译器会很高兴地警告丢失的返回语句。@chris我该怎么做?我在一个远程linux服务器上,但我可能在上面呆了一段时间,所以我更希望如果您执行mangcc
,您将得到一个所有编译选项的可理解列表,包括您正在寻找的选项。您是否熟悉man
命令,以及它的功能?不太熟悉,但我会详细了解它!
template <typename SomeType>
SomeType BSTree<SomeType>::DeleteItem(SomeType item){
if (rootPtr == NULL){
throw EmptyBSTree();
}
Delete(rootPtr, item);
cout<<"done"<<endl;
}
template <typename SomeType>
void BSTree<SomeType>::Delete(BSTreeNode<SomeType>*& treePtr, SomeType& item){
if (treePtr->data == item){
DeleteNode(treePtr);
cout<<"done2"<<endl;
}
else{
if (item<treePtr->data){
if (treePtr->leftPtr != NULL){
Delete(treePtr->leftPtr, item);
}
else{
throw NotFoundBSTree();
}
}
else{
if (treePtr->rightPtr != NULL){
Delete(treePtr->rightPtr, item);
}
else{
throw NotFoundBSTree();
}
}
}
template <typename SomeType>
void BSTree<SomeType>::DeleteNode(BSTreeNode<SomeType>*& treePtr){
cout<<"here"<<endl;
BSTreeNode<SomeType>* temp = new BSTreeNode<SomeType>;
temp = treePtr;
if (treePtr->leftPtr == NULL && treePtr->rightPtr == NULL){
delete temp;
}
else{
if (treePtr->leftPtr == NULL){
treePtr = treePtr->rightPtr;
delete temp;
}
else if (treePtr->rightPtr == NULL){
treePtr = treePtr->leftPtr;
delete temp;
}
else{
treePtr->data = GetPredecessor(treePtr->leftPtr);
Delete(treePtr->leftPtr,treePtr->data);
}
}
cout<<"I am here"<<endl;
}
template <typename SomeType>
void BSTree<SomeType>::DeleteNode(BSTreeNode<SomeType>*& treePtr){
BSTreeNode<SomeType>* temp;
temp = treePtr;
if (treePtr->leftPtr == NULL && treePtr->rightPtr == NULL){
delete temp;
cout<<"This is "<<treePtr->data<<endl;
}
else{
if (treePtr->leftPtr == NULL){
treePtr = treePtr->rightPtr;
delete temp;
}
else if (treePtr->rightPtr == NULL){
treePtr = treePtr->leftPtr;
delete temp;
}
else{
treePtr->data = GetPredecessor(treePtr->leftPtr);
Delete(treePtr->leftPtr,treePtr->data);
}
}
}