带有映射参数的函数需要其他参数

Function with map parameter needs additional arguments?

本文关键字:参数 其他 函数 映射      更新时间:2023-10-16

我有这段代码:

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()返回的内容被隐式转换为整数。

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

inline std::string WhateverTheClassIsCalled::SerializeAges(const std::map< int, std::pair<int, int> > &ageMap)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^
如果没有它,定义将

声明一个具有相同名称的单独非成员函数,并且该成员将保持未定义状态。