try / catch块上的g ++错误异常

时间:2014-03-13 09:08:21

标签: c++ exception exception-handling g++ try-catch

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

2 个答案:

答案 0 :(得分:1)

如果没有include:

,这将产生相同的错误
//#include <stdexcept>

int main(int argc, char* argv[]) {
    try {}
    catch(const std::out_of_range&) {}
}

g ++ 4.7.2

答案 1 :(得分:0)

我将评论转为答案。我想GCC实际上是在抱怨使用std::map::at introduced with C++11,因此不支持GCC 4.1.2 released in 2007。我会像这样重写代码:

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;
}