У меня есть сгенерированный файл .h, и я хочу получить доступ к одному из геттеров из main.cpp. Заголовок может показаться сложным:Доступ к вложенному классу, если контейнер не имеет своего экземпляра
#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;
};
В main.cpp я создаю объект protocol_t г и, конечно же, мои попытки получить доступ к его температура
cout << (*(*d.packet())[0]->body())->temperature() << endl;
терпит неудачу. В пакете_t просто нет экземпляра datagram_t, поэтому я не могу его достичь. Хотя я думаю, что это можно сделать как-то.
*** cout << (* (* d.packet()) [0] -> body()) -> температура() << endl; *** Пожалуйста, не пишите производственный код так! – drescherjm
Почему m_packet должен быть указателем на вектор? – drescherjm
Несомненно. Я просто пытаюсь быстро и грязно получить поле. – Dankevich