我正在尝试采用我创建的列表数据类型并将其作为模板。在这样做时,我遇到了以下晦涩的问题。如果需要,我可以发布所有代码,但这确实是导致问题的函数。
注意:在我使用这个方法之前,这段代码编译得很好。我在每写几行作为健全性检查后进行编译,一切都很好,但后来我到了这一点,它爆炸了。如果我从这个方法中取出 try/catch 块,它编译得很好,所以我很确定问题在那里被隔离,而不是标题/等中缺少分号。正如其他答案所报道的那样——尽管我当然做了三次检查以确保!:)
这是导致问题的代码:
template<class T>
bool UnsortedListType<T>::IsFull()
{
try { return false; }
catch(std::bad_alloc exception) { return true; } // line 35
}
就像我说的,我尽可能地简化了它,同时仍然触发了错误。这是错误:
UnsortedListType.cpp||In member function 'bool UnsortedListType<T>::IsFull()':
UnsortedListType.cpp|35|error: expected type-specifier
UnsortedListType.cpp|35|error: expected unqualified-id before 'exception'
UnsortedListType.cpp|35|error: expected ')' before 'exception'
UnsortedListType.cpp|35|error: expected '{' before 'exception'
UnsortedListType.cpp|35|error: 'exception' was not declared in this scope
UnsortedListType.cpp|35|error: expected ';' before ')' token
我能找到的关于这个错误的所有内容都表明问题要么是额外的分号,要么是缺少分号,无论是在标题中还是在这个文件中。我找不到任何一个实例。如果我删除 try/catch 块,它编译得很好。
另外,如果我捕捉到一个 int,它编译得很好:
template<class T>
bool UnsortedListType<T>::IsFull()
{
try { return false; }
catch(int exception) { return true; }
}
我也可以 catch(int) 并且它会编译得很好,但是如果我尝试 catch(std::bad_alloc) (即没有“异常”变量名)它会抛出上面列出的相同错误。即使我尝试简单地 catch(std::exception) 它也无法编译。
所以现在我很难过。无论如何,我都不是 C++ 专家,这是针对一门课的,我不知道如何克服这个错误。
顺便说一句,这是非通用版本的代码,它也可以很好地编译,并且逐字逐句地来自我正在使用的教科书(戴尔,如果有人想知道的话):
bool UnsortedListType::IsFull() const
{
NodeType* location;
try
{
location = new NodeType;
delete location;
return false;
}
catch (std::bad_alloc exception)
{
return true;
}
}
我在带有内置 GNU 编译器的 Windows 7 上使用 CodeBlocks 12.11 IDE。
任何帮助表示赞赏,如果需要,我很乐意发布更多代码,我只是不想填满页面。
提前谢谢了。
PS我应该说,是的,我正在做作业,但是作业并没有要求我制作模板,我选择自己走那条路。不确定它是否有任何相关性,但这是我第一次使用 C++ 模板,所以把它扔在那里。