访问嵌套类(如果容器没有其实例)
Access a nested class if the container doesn't have its instance
我有一个生成的.h文件,我想从main.cpp访问其中一个getter。标题可能看起来很复杂:
#include <kaitai/kaitaistruct.h>
#include <kaitai/kaitaistream.h>
#include <stdint.h>
#include <vector>
#include <sstream>
class protocol_t : public kaitai::kstruct
{
private:
std::vector<packet_t*>* m_packet;
protocol_t* m__root;
kaitai::kstruct* m__parent;
public:
class packet_t;
protocol_t(kaitai::kstream* p_io, kaitai::kstruct* p_parent = 0, protocol_t* p_root = 0);
~protocol_t();
std::vector<packet_t*>* packet() const { return m_packet; }
protocol_t* _root() const { return m__root; }
kaitai::kstruct* _parent() const { return m__parent; }
};
class packet_t : public kaitai::kstruct
{
private:
uint8_t m_pkt_id;
kaitai::kstruct* m_body;
protocol_t* m__root;
protocol_t* m__parent;
public:
uint8_t pkt_id() const { return m_pkt_id; }
kaitai::kstruct* body() const { return m_body; }
protocol_t* _root() const { return m__root; }
protocol_t* _parent() const { return m__parent; }
class handshake_t;
class datagram_t;
packet_t(kaitai::kstream* p_io, protocol_t* p_parent = 0, protocol_t* p_root = 0);
~packet_t();
};
class handshake_t : public kaitai::kstruct
{
public:
std::string version() const { return m_version; }
protocol_t* _root() const { return m__root; }
protocol_t::packet_t* _parent() const { return m__parent; }
handshake_t(kaitai::kstream* p_io, protocol_t::packet_t* p_parent = 0, protocol_t* p_root = 0);
~handshake_t();
private:
std::string m_version;
protocol_t* m__root;
protocol_t::packet_t* m__parent;
};
class datagram_t : public kaitai::kstruct {
public:
uint16_t left_time() const { return m_left_time; }
int8_t temperature() const { return m_temperature; }
protocol_t* _root() const { return m__root; }
protocol_t::packet_t* _parent() const { return m__parent; }
datagram_t(kaitai::kstream* p_io, protocol_t::packet_t* p_parent = 0, protocol_t* p_root = 0);
~datagram_t();
private:
uint16_t m_left_time;
int8_t m_temperature;
protocol_t* m__root;
protocol_t::packet_t* m__parent;
};
主要.cpp我创建了一个protocol_t d的对象,当然还有我尝试访问其温度的尝试
cout << (*(*d.packet())[0]->body())->temperature() << endl;
失败。packet_t根本没有datagram_t的例子,所以我无法达到它。虽然我想可以以某种方式完成。
让我们用纸和笔来计算这个表达式:
(*(*d.packet())[0]
d.packet()
返回一个std::vector<packet_t*> *
:
std::vector<packet_t*>* packet() const { return m_packet; }
这就是它宣布返回的内容。进入下一步:
因此,*d.packet()
为您提供了一个std::vector<packet_t*>
,即将 *
运算符应用于从类方法返回的指针的结果(实际上,结果是一个引用,但这与手头的问题无关(。
下一步:
(*(*d.packet())
- 这就是一个问题。 显然,std::vector<packet_t *>
不是可以应用*
运算符的指针。显然,它是一个载体。
这就是编译错误的原因。
相关文章:
- 创建模板嵌套类实例的语法?
- 另一个类中嵌套模板的外部实例化
- Cllass 函数不解析嵌套类实例或函数
- C++嵌套类实例
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 为什么Clang无法使用默认的Integer_Sequence实例化嵌套的变异模板
- OpenMP 如何知道嵌套了多少个循环实例
- 声明嵌套基模板类实例是派生类的好友
- 访问嵌套类(如果容器没有其实例)
- 如何在给定包含类的实例的情况下实例化嵌套类
- 外部类的嵌套类定义,而外部类包含内部类的实例
- 私有嵌套类 c++ 的可视化实例
- 嵌套模板类的实例化
- 当创建嵌套类的实例时,是否也是正在生成的嵌套类的一个实例
- 通过外部类的实例访问嵌套的内部类
- 初始化模板类中嵌套类的静态实例
- 如果模板存在嵌套类型(未访问),且该方法无法编译,则模板可以实例化吗?
- 允许嵌套结构具有包含类的实例
- 如何使嵌套类的变量对父类的每个实例都是静态的
- 嵌套类中的类实例化