映射继承

map inheritance

本文关键字:继承 映射      更新时间:2023-10-16

我有一个父类,它包含一个映射,而我用来继承该类的子类由于某种原因无法访问映射,我无法理解为什么,我想访问映射中的值。

我的代码如下

//HEADER FILE 
#include <iostream>
#include <map>
using namespace std;
//////PARENT CLASS
struct TTYElementBase
{
    //some code here
};
class element
{
    public:
        std::map<char,std::string> transMask;
        std::map<char,std::string>::iterator it;
        void populate();
};
//////CHILD CLASS .HPP
class elementV : public element
{
public :
    std::string s1;
    std::string s2;
    elementV();
    friend ostream &operator<< (ostream &, const elementV &);
    void transLateMask();
};
//CPP FILE 
#include "example.h"
#include <iostream>
elementV::elementV()
{
}
void elementV::transLateMask()
{
    for ( it=transMask.begin() ; it != transMask.end(); it++ )
        cout << (*it).first << endl;
}
int main()
{
    elementV v;
    v.transLateMask();
}
// ' OUTPUT IS NOTHING I DONT KNOW WHY?'

输出只是我需要从父类访问映射,我做错了什么?

任何帮助我都会非常感激

感谢

调用transLateMask()时,映射是否包含'D'的条目?如果没有,您将得到未定义的行为(可能是运行时错误),因为您没有检查find()的结果。像这样的东西会更强大:

auto found = transMask.find('D');
if (found == transMask.end()) {
    // handle the error in some way, perhaps
    throw std::runtime_error("No D in transMask");
}
std::string str = found->second;

(如果您没有使用C++11,请将auto替换为完整的类型名称std::map<char,std::string>::const_iterator)。

或者,C++11添加了一个at()方法,如果找不到密钥,该方法会抛出std::out_of_range

std::string str = transMask.at('D')->second;

std::mapfind()方法可以返回一个迭代器,该迭代器是映射的"超出末尾一个",即等于end()的结果。这意味着地图上没有这样的条目。你必须检查一下:

typedef std::map<char,std::string> mymap;
mymap::const_iterator i = transMask.find('D');
if ( i == transMask.end()) {
    std::cerr << "'D' not found" << std::endl;
} else {
    ...
}