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