Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 名称空间的问题_Java_C++_Swig - Fatal编程技术网

Java 名称空间的问题

Java 名称空间的问题,java,c++,swig,Java,C++,Swig,我有以下问题。我试图把代码从C++封装到java。 普通的 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_o

我有以下问题。我试图把代码从C++封装到java。 普通的

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;
}}
名称空间rinad{
名称空间管理器{
模板
类编码器{
公众:
虚拟~Encoder(){}
虚空编码(常数T&obj,序列T&serobj)=0;
虚拟空解码(const ser_obj_t&serobj,
T&des_obj)=0;
};
类型定义结构ipcp_配置{
....
}ipcp配置;
}}
编码器

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"; };
};
}}
名称空间rinad{
名称空间管理器{
IPCPConfigEncoder类:公共编码器{
公众:
无效编码(常量ipcp配置和对象,
服务对象和服务对象);
无效解码(常数序列号和序列号),
ipcp_配置和obj);
std::string get_type()const{return“ipcp config”;};
};
}}
利伯里纳德,我

%{
#include "common.h"
#include "encoders.h"
%}
%include "common.h"

%template(TempIPCPConfigEncoder) rinad::mad_manager::Encoder<rinad::mad_manager::ipcp_config_t>;

%include "encoders.h"
%{
#包括“common.h”
#包括“encoders.h”
%}
%包括“common.h”
%模板(tempicpconfigencoder)rinad::mad_manager::编码器;
%包括“encoders.h”

生成的.cc文件(<代码> SWIG-O RealInAdjavaC.<代码>)但不考虑导致错误的一些命名空间。

librinad_java.cc:836:32:错误:“ipcp_config_t”未在此作用域中声明 rinad::mad_管理器::编码器*arg1=(rinad::mad_管理器::编码器*)0

我试图指定每个名称空间(即使它不是必需的),但它也不起作用。如果我在
librinad\u java.cc
中手动添加名称空间
rinad::mad\u manager::ipcp\u config\u t
,它会工作,因此问题是SWIG不会导出此名称空间。我想不出这是什么问题


附带问题。我必须将
common.h
中显示的代码与
encoders.h
中显示的代码分开,以便能够在实例化(
encoders.h
)之前,但在定义了
ipcp\u config\u t
之后(
common.h
)在
.I
中指定模板。这是唯一的方法吗?

好的,下面是一个答案。不做

typedef struct ipcp_config{
....
}ipcp_config_t;
但是


这对我有效,因为我不需要转发声明。如果需要声明(例如在递归结构中),我仍然不知道该怎么做。

!我不知道为什么。。。我想这是一个typedef包装问题
typedef struct{
....
}ipcp_config_t;