我有这段代码:
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。
答案 0 :(得分:2)
从评论中看来,它似乎是一个班级成员。在这种情况下,定义将需要使用限定名称:
inline std::string WhateverTheClassIsCalled::SerializeAges(const std::map< int, std::pair<int, int> > &ageMap)
^^^^^^^^^^^^^^^^^^^^^^^^^^
没有它,该定义声明了一个具有相同名称的单独的非成员函数,并且该成员仍未定义。