我有一個生成的.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;
};
在main.cpp中創建protocol_t d,當然我嘗試的對象來訪問它的溫度
cout << (*(*d.packet())[0]->body())->temperature() << endl;
失敗。 packet_t中根本沒有datagram_t的實例,所以我無法實現它。雖然我猜想它可以以某種方式完成。
*** cout <<(*(* d.packet())[0] - > body()) - > temperature()<< endl; ***請不要寫這樣的生產代碼! – drescherjm
爲什麼m_packet需要是一個指向矢量的指針? – drescherjm
當然。我只是想盡快趕到現場。 – Dankevich