map参数的函数需要额外的参数吗? [关闭]

问题描述 投票:-2回答:1

我有这段代码:

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。

c++ dictionary std-pair
1个回答
2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.