Asunto: RE: [CORBA-Comp] Warning con 'const'
Fecha: Tue Apr 4 22:22:14 2000
De: Diego Sevilla Ruiz <dsevilla@ditec.um.es>
Hola, Emilio:
On Tue, 4 Apr 2000, Emilio Hernández Martín wrote:
>
> Hola.
>
> Lo primero de todo, gracias por solucionarme el problema.
>
>
> >> int Nombre_clase::Nombre_funcion ( const Clase_param ¶m )
> >> {
> >> ...
> >> String direccion = "mi dirección";
> >> direccion += ( param1.Cadena );
> >>
> >> int new_argc = 2;
> >> char **new_argv = new char*[new_argc+1];
> >>
> >> new_argv[0] = "-ORBNamingAddr";
> >> new_argv[1] = direccion; < WARNING AQUÍ.
> >> new_argv[2] = 0;
> >>
> >> myorb = CORBA::ORB_init( new_argc, new_argv, "mico-local-orb" );
> >> ...
> >> }
> >>
> >> Al compilar me dice:
> >>
> >> warning: conversion to `char *' from `const char *' discards const
> >>
>
>
> > En primer lugar ¿qué tipo es String?
>
> Es un objeto de la clase String de STL (del archivo de cabecera 'String.h'
> de STL)
>
que compilador utilizas? perdona que sea algo terco, pero es que tambien
dudo yo ahora porque creo que el tipo String ya no se utiliza en las
nuevas versiones de C++. Al menos yo no lo encuentro en
/usr/include/g++-2/ en mi Linux. De cualquier forma, la explicacion se
aplica.
Aunque ahora que lo pienso, el tipo actual de C++ (el que define
Stroustrup y el ANSI) es "string". De hecho la propia implementacion de
MICO utiliza vector<string>, etc.
>
>
> > // 1ª solución (más elegante)
> > new_argv[2] = new char[direccion.length()+1];
> > strcpy(new_argv[2],direccion);
> >
> > // hacer la llamada...
> >
> > // Y finalmente, hacer un ...
> > delete new_argv[2];
>
> Esta es la solución que adopté. Como decías que era la más elegante... :o)
>
>
> > Aunque es posible que la operación "strcpy" lance otro "Warning"
>
> Pues no, no ha aparecido ninguno.
mejor que mejor ;-)
>
>
> -----------------------------------------------------------------------
>
> > UN ÚLTIMO CONSEJO: No utilices directamente new_argv[0], ya que
> > normalmente en esa posición está el nombre del ejecutable. El código del
> > ORB puede tranquilamente empezar a considerar los argumentos desde
> > new_argv[1] sin romper el contrato y tu código no funcionaría. Bien copia
> > el primer elemento de tu propio argv o bien introduce en new_argv[0]
> > alguna cadena no vacía.
>
> Esto no lo he entendido muy bien. ¿Cómo debería inicializar entonces el
> 'char **new_argv' de mi ejemplo de arriba?, ¿a partir de 'new_argv[1]' ?
>
Si:
new_argv[0] = "dummy";
new_argv[1] = ...; // aqui empiezan las opciones
> -----------------------------------------------------------------------
>
> Por último, otra pregunta relacionada con la inicialización del ORB.
>
> Si lo quiero inicializar en una función cualquiera y sin necesidad de
> argumentos de entrada ( los 'int argc', 'char *argv[]' de 'main()' ), ¿qué
> tengo que poner en los 2 primeros parámetro de 'ORB_init()'?, es decir, si
> llamamos al método, por ejemplo:
>
> ORB_init( X, Y, "mico-local-orb" )
>
> ¿qué valores debo poner en X y en Y para poder llamar a este método desde
> una función cualquiera?. ¿Debo definir otros 'int argc' y 'char * argv[]' en
> dicho método?, y si fuese así, ¿cómo hago para que estén "vacíos"?
>
Lo bueno de los ORB de libre distribucion es que puedes ver su codigo, y
asi comprobar si lo que parece evidente se puede utilizar. El codigo
indica que introduciendo un 0 en argc no se miraran los argumentos. Asi
puedes llamar
ORB_init(0,0,"mico-local-orb")
Aun asi, el ORB es un singleton (siempre te devolvera el mismo objeto) y
llamarlo en distintas partes del programa con distintos argumentos no
tiene un comportamiento definido. Lo mejor es guardar el ORB ya sea en una
variable "static" o en una variable de la clase "wrapper" que, como veo,
has construido para la inicializacion del ORB.
>
>
>
> > Espero que esto te ayude.
>
> Ya lo creo.
> Muchas gracias.
> Y perdonad mi ignorancia.
>
Oh, no. Aqui todos estamos para aprender y para ayudarnos unos a otros!!
> > Saludos.
> > diego.
>
> SalU2.
> Emilio.
>
>
>
>
>
--------------------------------------------------------------------------
Esta es la lista de discusión de CORBA y Componentes Software (corba-comp)
--------------------------------------------------------------------------
Suscripcion: Envie un correo a mailto:Majordomo@ditec.um.es?body=subscribe%20corba-comp
Eliminar su suscripcion: mailto:Majordomo@ditec.um.es?body=unsubscribe%20corba-comp
Informacion de la lista: mailto:Majordomo@ditec.um.es?body=info%20corba-comp
Problemas: mailto:corba-comp-owner@ditec.um.es
Indices de la lista: http://www.ditec.um.es/~dsevilla/corba/
--------------------------------------------------------------------------