嗨,我的代码片段如下所示
#include <iostream>
#include <string>
#include <unordered_map>
struct job
{
int priority;
int state;
std::string name;
};
job* selectJob(std::unordered_map<int, job*> jobList)
{
for (auto& x : jobList)
{
if(x->state == 1)
return x;
}
return NULL;
}
int main()
{
std::unordered_map<int, job*> jobList;
job a = { 1, 1, "a" };
jobList.insert(std::make_pair<int, job*>(1, &a));
job *selected = NULL;
while (NULL != (selected = selectJob(jobList)))
{
std::cout << "Name: " << selected->name << "Prio: " << selected->priority << std::endl;
selected->state = 2;
}
return 0;
}在linux上编译时,它会抛出一个错误:
g++ -std=gnu++0x q.cpp
q.cpp: In function âjob* selectJob(std::unordered_map<int, job*, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, job*> > >&)â:
q.cpp:13: error: a function-definition is not allowed here before â:â token
q.cpp:18: error: expected primary-expression before âreturnâ
q.cpp:18: error: expected `;' before âreturnâ
q.cpp:18: error: expected primary-expression before âreturnâ
q.cpp:18: error: expected `)' before âreturnâ有人面对过这个问题吗?
发布于 2013-12-20 21:34:43
您使用的编译器版本(gcc 4.3)不支持自动变量。
status.html
自动类型变量N1984编号
发布于 2013-12-20 21:32:05
value_type的unordered_map是一对键和值,您需要选择第二个。
job* selectJob(std::unordered_map<int, job*> jobList)
{
for (auto& x : jobList)
{
if(x->second->state == 1)
return x->second;
}
return NULL;
}此外,您可能需要传递引用,以避免复制和导致一个悬空点。
job* selectJob(std::unordered_map<int, job*>& jobList)https://stackoverflow.com/questions/20711965
复制相似问题