map参数的函数需要额外的参数吗?

时间:2014-02-17 13:32:31

标签: c++ dictionary std-pair

我有这段代码:

std::map< int, std::pair<int, int> > m;
for ( std::vector<Pass*>::const_iterator passIt = it->GetPasses().begin(); passIt != it->GetPasses().end(); ++passIt )
{
    m.insert( std::make_pair((*passIt)->GetType(), (*passIt)->GetAgeRange()) );
}
--> ages.push_back( new std::istringstream(SerializeAges(m)) ); <--

标记的行会产生此错误:

undefined reference to `SerializeAges(std::map<int, std::pair<int, int>, std::less<int>, 
 std::allocator<std::pair<int const, std::pair<int, int> > > > const&)'

声明:

 static std::string SerializeAges(const std::map< int, std::pair<int, int> > &ageMap);

定义:

inline std::string SerializeAges(const std::map< int, std::pair<int, int> > &ageMap)
{       
}

其他被调用函数的签名:

std::pair<int, int> GetAgeRange() const;

我不知道这里出了什么问题。

编辑:抱歉,Type是枚举,因此GetType()返回的内容会隐式转换为int。

1 个答案:

答案 0 :(得分:2)

从评论中看来,它似乎是一个班级成员。在这种情况下,定义将需要使用限定名称:

inline std::string WhateverTheClassIsCalled::SerializeAges(const std::map< int, std::pair<int, int> > &ageMap)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^

没有它,该定义声明了一个具有相同名称的单独的非成员函数,并且该成员仍未定义。