映射继承
map inheritance
我有一个父类,它包含一个映射,而我用来继承该类的子类由于某种原因无法访问映射,我无法理解为什么,我想访问映射中的值。
我的代码如下
//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::map
的find()
方法可以返回一个迭代器,该迭代器是映射的"超出末尾一个",即等于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 {
...
}
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 继承函数的重载解析
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 继承期间显示未知行为的子类
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 将数据添加到现有类,而无需继承、映射或修改类
- 在visual c++中从无序映射继承时,模板参数的sizeof()不正确
- C++-智能指针的矢量映射-所有这些都继承自同一基类
- 所有从同一类继承的对象的映射,调用对象方法而不是父对象;c++
- 为什么继承顺序或映射会影响 vftable 的下标?(对于 VSC 表示C++)
- 如何在 C 中映射继承的C++结构
- 映射继承
- 具有多重继承的消息映射MFC:如何避免警告C4407和运行时崩溃
- 消息映射MFC:继承多个消息映射
- C++使用模板和继承创建函数映射
- 使用继承的类作为映射值
- C++ 多态性 - 继承类的映射