/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

non lvalue in assignment

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
sasha12



Registrado: 27 Sep 2007
Mensajes: 13

MensajePublicado: 19/10/2007 10:42 am
Título: non lvalue in assignment

Hola, cambie de tema y titulo en este thread para preguntar otra cosa sobre el mismo codigo:
Código:

char* pTC;
    char* pTE;
    pTC = new char [prod.size()+1];
    strcpy (pTC, prod.c_str());
/*....*/
pTE = new char [chooseTV.size()+1];
    strcpy (pTE, chooseTV.c_str());
/*....*/
strnicmp (pTE, strtok(pTC, " "), 9); // << acá no hay error
strnicmp (pTE, strtok(NULL, " "), 9); // << acá sí

Que tiene esto de malo? si es muy poco por favor avisar que pongo mas codigo (aunque el error esta solo ahi)
el error es 'non-lvalue in assignment'


Ultima edición por sasha12 el 19/10/2007 3:00 pm; editado 1 vez
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 19/10/2007 11:58 am
Título:

El code tiene varias incongruencias, supongo que derivadas del desconocimiento de la clase std::string.

C++ es fuertemente tipificado, si el parámetro de una función espera un tipo const T*, este debe ser const T*, salvo en las conversiones triviales hay que tener especial cuidado, y el typecast no siempre es una solución.

La clase string tiene sobrecargado entre otros los operadores == y != , ambos devuelven true o false al comparar dos objetos del tipo mencionado.

Por otra parte esta asignación no es correcta:
Código:
pTC = (char*)?

prod se avalúa y como resultado devuelve la dirección del primer elemento que no es ni de lejos un (char*) si no un puntero a un array de std::string, y aun eliminando el '&' se resuelve al devolver un puntero a std::string y ni hablar de usar reinterpret_cast.

Una forma de declarar e inicializar el puntero correctamente:
Código:
 pTC = &prod[0]; 
// o también
pTC = prod; 


Ahora podemos actuar con el normalmente, esto implica aritmética para indexación, indirecion y referencia, siempre que sean consistentes, en el bloque donde utilizas strnicmp no lo es.

Si quisiéramos un puntero a los elementos de un std::string el método a utilizar es c_str() este retorna un const char* recordando que const no califica como en C, en C++ se refiere a un tipo de solo lectura.

Y después de meter este ladrillo ... ¿Que es lo que quieres hacer?

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 19/10/2007 5:04 pm
Título:

Si a strtok le pasas NULL en vez de un buffer modificable el resultado es desastroso, si a esto añadimos que strtok devuelve NULL sobre strnicmp es posible que tu PC salga corriendo del susto.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3841
Ubicación: Mexico

MensajePublicado: 19/10/2007 7:12 pm
Título:

El paso de NULL como primer argumento en la segunda llamada a strtok es valido e indica a esta funcion que devuelva el siguiente token, aun asi es una muy mala idea colocar la llamada a strtok dentro de la llamada a strnicmp por la razon ya mencionada por Cheroky.

El error "non-lvalue in assignment" indica que al tratar de realizar una asignacion en la forma "x = y" el identificador o expresion "x" no denota (o hace referencia a) un objeto.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com