尝试/捕获块上的 G++ 错误为异常

g++ errors on try/catch block for exception

本文关键字:G++ 错误 异常 尝试      更新时间:2023-10-16

Code 在 VS 和 Xcode 上编译得很好,但 g++ 当然不喜欢它。我已经盯着这个几个小时了,只是在下水道里盘旋。这其中有善业!:)

这是我正在使用的 g++ 版本:

[...]$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)

这是代码:

Item* Library::findItem(unsigned int hash) {
//retrieve reference to Items::AllItems
std::map<unsigned int, Item*>& allItems = MyItems.getItems();
Item* item = NULL;
try {
item = allItems.at(hash);
}
//LINE 74 BELOW: the catch line
catch (const std::out_of_range& e) {
return NULL;
}
return item;
}

这是错误:

library.cpp: In member function ‘Item* Library::findItem(unsigned int)’:
library.cpp:74: error: expected `(' before ‘{’ token
library.cpp:74: error: expected type-specifier before ‘{’ token
library.cpp:74: error: expected `)' before ‘{’ token

这将产生相同的错误,而无需包含:

//#include <stdexcept>
int main(int argc, char* argv[]) {
try {}
catch(const std::out_of_range&) {}
}

g++ 4.7.2

我会把我的评论变成一个答案。我想 GCC 实际上是在抱怨使用std::map::at,这是在 C++11 中引入的,因此不受 2007 年发布的 GCC 4.1.2 的支持。我会像这样重写代码:

Item* Library::findItem(unsigned int hash) {
std::map<unsigned int, Item*>& allItems = MyItems.getItems();
const std::map<unsigned int, Item*>::iterator it = allItems.find(hash);
if (it == allItems.end())
return NULL;
return it->second;
}