Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error C2440: '=' : no se puede realizar la conversión de 'const char *' a 'char *'

Estas en el tema de error C2440: '=' : no se puede realizar la conversión de 'const char *' a 'char *' en el foro de C/C++ en Foros del Web. Estoy intentando compilar con Visual Studio 2003 un programa que fue creado con Visual Studio 6.0 y obtengo en siguiente error: c:\En Curso_1\Chromatic\Svn\Truck\Src\Classes\CList.h(13 5) : ...
  #1 (permalink)  
Antiguo 07/07/2010, 04:29
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 9 meses
Puntos: 0
error C2440: '=' : no se puede realizar la conversión de 'const char *' a 'char *'

Estoy intentando compilar con Visual Studio 2003 un programa que fue creado con Visual Studio 6.0 y obtengo en siguiente error:

c:\En Curso_1\Chromatic\Svn\Truck\Src\Classes\CList.h(13 5) : error C2440: '=' : no se puede realizar la conversión de 'const char *' a 'char *'
Se pierden calificadores en la conversión
c:\En Curso_1\Chromatic\Svn\Truck\Src\Classes\CList.h(10 5) : vea la referencia a la creación de instancias de plantilla de función 'CList<T>::CList_Entry *CList<T>::Set<const char>(CList<T>::CList_Entry *,const char)' que se está compilando
with
[
T=char *
]
c:\En Curso_1\Chromatic\Svn\Truck\Src\Dlg_UserMenusEd.cp p(758) : vea la referencia a la creación de instancias de plantilla de función 'CList<T>::CList_Entry *CList<T>::Add<const char*>(const char)' que se está compilando
with
[
T=char *
]


¿Alguien me puede ayudar a solucionarlo?

Muchas gracias
ipadilla
  #2 (permalink)  
Antiguo 08/07/2010, 16:57
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: error C2440: '=' : no se puede realizar la conversión de 'const char *' a

La logica detras del error es que no puedes asignar un puntero a un dato constante a un puntero de tipo no constante. La solucion es un casteo, asi

puntero2 = (char*)(puntero1);
  #3 (permalink)  
Antiguo 08/07/2010, 23:34
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: error C2440: '=' : no se puede realizar la conversión de 'const char *' a

Hola margarito04,
Muchas gracias por tu ayuda. He probado a cambiar la linea que presenta el error:
template<typename T> CList_Entry *Set(CList_Entry *Entry_To_Set, T Datas)
{
Entry_To_Set->Content = (T) Datas; -----Esta es la línea del error
return(Entry_To_Set);
}

por:
Entry_To_Set->Content = (char*)((T) Datas); -----Esta es la línea del error

pero no me elimina el error. ¿Me puedes ayudar a realizar el casting?
Aquí te adjunto el código para facilitarte las cosas.
La línea que produce el error tiene una nota en rojo
ipadilla
ipadilla

// -----------------------------------------------------------------------
// CList.h: interface for the CList class
// -----------------------------------------------------------------------

#ifndef _CLIST_H_
#define _CLIST_H_

// -----------------------------------------------------------------------
// Includes
#include <stdlib.h>
#include <string.h>

// -----------------------------------------------------------------------
// Class definition
template <typename T> class CList
{
public:

#define ERASE_CALLBACK void (*CallBack)(T Content)

struct CList_Entry
{
struct CList_Entry *Next;
struct CList_Entry *Previous;
T Content;
};

// Default Constructor/Destructor
CList()
{
Free_Content = 0;
Nbr_Entries = 0;
Last_Entry = 0;
First_Entry = 0;
}

~CList()
{
this->Erase();
}

void Erase(ERASE_CALLBACK = NULL)
{
CList_Entry *Entry_To_Free;

// Take first entry in the list
Entry_To_Free = this->First_Entry;

while(Entry_To_Free)
{
First_Entry = Entry_To_Free->Next;
if(CallBack)
{
CallBack(Entry_To_Free->Content);
}
Del(Entry_To_Free);
Entry_To_Free = First_Entry;
}
}

int Amount(void)
{
return(Nbr_Entries);
}

CList_Entry *Add(T Datas, int Size)
{
CList_Entry *New_Entry = Create_Entry(Size);
Set(New_Entry, Datas, Size);
return(New_Entry);
}

template<typename T> CList_Entry *Add(T Datas)
{
CList_Entry *New_Entry = Create_Entry(0);
Set(New_Entry, Datas);
return(New_Entry);
}

template< > CList_Entry *Add<char *>(char *Datas)
{
int Size = strlen(Datas) + 1;
CList_Entry *New_Entry = Create_Entry(Size);
Set(New_Entry, Datas, Size);
return(New_Entry);
}

void MAdd(int Number, T Datas)
{
while(Number)
{
Add(Datas);
Number--;
}
}

CList_Entry *Set(int Entry_Number, T Datas)
{
CList_Entry *Entry_To_Set = Get(Entry_Number);
Set(Entry_To_Set, Datas);
return(Entry_To_Set);
}

template<typename T> CList_Entry *Set(CList_Entry *Entry_To_Set, T Datas)
{
Entry_To_Set->Content = (T) Datas; -----Esta es la línea del error
return(Entry_To_Set);
}

template< > CList_Entry *Set<char *>(CList_Entry *Entry_To_Set, char *Datas)
{
return(Set(Entry_To_Set, Datas, strlen(Datas) + 1));
}

CList_Entry *Set(int Entry_Number, T Datas, int Size)
{
CList_Entry *Entry_To_Set = Get(Entry_Number);
Set(Entry_To_Set, Datas, Size);
return(Entry_To_Set);
}

CList_Entry *Set(CList_Entry *Entry_To_Set, T Datas, int Size)
{
free((void *) Entry_To_Set->Content);
Entry_To_Set->Content = (T) calloc(Size, 1);
memcpy((void *) Entry_To_Set->Content, (void *) Datas, Size);
Free_Content = 1;
return(Entry_To_Set);
}

CList_Entry *Get(CList_Entry *Entry_To_Get)
{
CList_Entry *Current_Entry;

Current_Entry = this->First_Entry;
while(Current_Entry != Entry_To_Get)
{
Current_Entry = Current_Entry->Next;
}
return(Current_Entry);
}

CList_Entry *Get(int Entry_Number)
{
CList_Entry *Entry_To_Get;

Entry_To_Get = First_Entry;
while(Entry_Number)
{
Entry_To_Get = Entry_To_Get->Next;
Entry_Number--;
}
return(Entry_To_Get);
}

void Del(CList_Entry *Entry_To_Delete)
{
CList_Entry *Previous_Entry;
CList_Entry *Next_Entry;

if(!First_Entry)
{
Nbr_Entries = 0;
Last_Entry = 0;
First_Entry = 0;
return;
}
// First will be next
if(First_Entry == Entry_To_Delete) First_Entry = Entry_To_Delete->Next;
// Last will be previous
if(Last_Entry == Entry_To_Delete) Last_Entry = Entry_To_Delete->Previous;
// Get next/previous entries
Previous_Entry = Entry_To_Delete->Previous;
Next_Entry = Entry_To_Delete->Next;
if(Free_Content)
{
free((void *) Entry_To_Delete->Content);
}
free(Entry_To_Delete);
// Update previous/next entries
if(Next_Entry) Next_Entry->Previous = Previous_Entry;
if(Previous_Entry) Previous_Entry->Next = Next_Entry;
if(this->Nbr_Entries) this->Nbr_Entries--;
}
};

#endif

Etiquetas: char, const, realizar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:45.