Java – namespace issues
I have the following questions I tried to wrap the code from C to Java
COMMON. H
namespace rinad { namespace mad_manager { template<class T> class Encoder{ public: virtual ~Encoder(){} virtual void encode(const T &obj,ser_obj_t& serobj) = 0; virtual void decode(const ser_obj_t &serobj,T& des_obj) = 0; }; typedef struct ipcp_config{ .... }ipcp_config_t; }}
encoders. h
namespace rinad { namespace mad_manager { class IPCPConfigEncoder: public Encoder<ipcp_config_t> { public: void encode (const ipcp_config_t &obj,ser_obj_t& ser_obj); void decode(const ser_obj_t &ser_obj,ipcp_config_t& obj); std::string get_type() const{ return "ipcp-config"; }; }; }}
librinad. i
%{ #include "common.h" #include "encoders.h" %} %include "common.h" %template(TempIPCPConfigEncoder) rinad::mad_manager::Encoder<rinad::mad_manager::ipcp_config_t>; %include "encoders.h"
However, generated The CC file (swig < Options > - O librarinad_java. CC) does not consider some namespaces that cause errors
librinad_ java. CC: 836:32: error: 'IPCP' is not declared in this scope_ config_ t’ rinad :: mad_ Manager: encoder and lt; ipcp_ config_ t> * arg1 =(rinad :: mad_manager :: Encoder< ipcp_config_t> *)0;
I tried to specify each namespace (even if it wasn't necessary), but it didn't work If I were in librinad_ java. Add namespace rinad:: mad manually in CC_ manager :: ipcp_ config_ T it works, so the problem is that swig will not export this namespace I can't figure out what the problem is here
Side questions I have to encode The code shown in H is the same as that of encoders The code shown in H is separated so that it can be used before instantiation (encoders. H) I, but IPCP is defined in_ config_ After t (common. H)) Is this the only way?
Solution
OK, that's an answer Don't do it
typedef struct ipcp_config{ .... }ipcp_config_t;
but
typedef struct{ .... }ipcp_config_t;
This works for me because I don't need to forward the statement If I need a declaration, I still don't know what to do (for example, in a recursive structure)