返回序列CORBA C+时出现分段错误+;服务器Java客户端 我正在开发一个项目,在这个项目中,我需要用C++实现java中的聊天服务器和Java的聊天客户端,用以实现GUI。

返回序列CORBA C+时出现分段错误+;服务器Java客户端 我正在开发一个项目,在这个项目中,我需要用C++实现java中的聊天服务器和Java的聊天客户端,用以实现GUI。,c++,segmentation-fault,corba,C++,Segmentation Fault,Corba,我遇到了这个问题,实施了几乎相同的项目: 这是IDL的一部分,问题是: typedef sequence<ICliente> ListaClientes; interface IServer { attribute ListaClientes lista; void registrar_usuario (in ICliente cliente) raises (usuarioRegistrado); IConversacion crear_conversacion (

我遇到了这个问题,实施了几乎相同的项目:

这是IDL的一部分,问题是:

typedef sequence<ICliente> ListaClientes;

interface IServer
{
  attribute ListaClientes lista;
  void registrar_usuario (in ICliente cliente) raises (usuarioRegistrado);
  IConversacion crear_conversacion (in ICliente cliente);
  ListaClientes obtener_lista();
  void dar_baja(in ICliente cliente);
};
其中:

ListaClientes_var userList=new ListaClientes(size);

或:

应该是

ListaClientes* Server_i::obtener_lista() {
   ListaClientes_var my_list = new ListaClientes(size);
   my_list->length (size);
   // Fill the elements in the newly created sequence by doing a duplicate of each object reference as it exists in the member variable
    for(CORBA::ULong i=0;i<userList->length();i++){
      my_list[i] = ICliente::_duplicate(userList[i]);
    }
   return my_list._retn();
}
ListaClientes*Server_i::obtener_lista(){
ListaClientes_var my_list=新的ListaClientes(大小);
我的列表->长度(大小);
//通过复制成员变量中存在的每个对象引用,在新创建的序列中填充元素
for(CORBA::ULong i=0;ilength();i++){
my_list[i]=IClient::_duplicate(userList[i]);
}
返回我的列表。_retn();
}

你能粘贴一个userList的代码吗?\u retn()请?这只是omniorb在编译IDL时生成的代码。试图直接返回ListaCiLeNe*对象也会引发分割For考虑使用支持新IDL的产品到C++ 11语言映射。有一个IDL序列映射到std::vector,不再有变量。例如,我们有针对Windows和Linux的免费评估包。userList是一个类变量,我可以使用userList->get_buffer()->昵称()访问它的内容,例如,打印客户端名称,它可以在所有userList大小中工作。您建议如何通过复制每个元素来填充新创建的序列中的元素?我尝试了以下方法:
for(int I=0;iget_buffer()[I]->\u duplicate(userList->get_buffer()[I]);
返回辅助参数。\u retn()
,但它不起作用。谢谢,如果我更疯狂,我必须尝试安装TAOX11。你不应该使用get_buffer(),这都是内部的。你必须返回一份列表,因为userList[I]我正在使用get_buffer是类型ListaClientes&如果我使用userList->get_buffer()[I]它返回类型_objref_ICliente*(即ICliente\u ptr)。使用您的代码返回以下错误(这就是为什么我使用get_buffer())
调用“Chat::ICliente::\u重复(Chat::ListaClientes&)
候选对象是:静态聊天::\u objref\u ICliente*聊天::ICliente::\u重复(聊天::\u objref\u ICliente*)
。感谢您设法解决了这个问题,您必须在任何地方都使用ListaClientes\u变量,您只是不能使用ListaClientes*,这就是问题所在,我已将userList声明为ListaClientes*。非常感谢您。
ListaClientes* userList=new ListaClientes(size);


ListaClientes* Server_i::obtener_lista() {
   return userList;
}
ListaClientes* Server_i::obtener_lista() {
   ListaClientes_var my_list = new ListaClientes(size);
   my_list->length (size);
   // Fill the elements in the newly created sequence by doing a duplicate of each object reference as it exists in the member variable
    for(CORBA::ULong i=0;i<userList->length();i++){
      my_list[i] = ICliente::_duplicate(userList[i]);
    }
   return my_list._retn();
}