[C con Clase] Problemas con inicializacion de tipos

Ferran Ferri ferranferri en gmail.com
Dom Sep 20 20:42:57 CEST 2009


Tienes toda la razon. Era justamente eso. Por cierto, por que es
conveniente que le quite los parentesis a los constructores?

Muchas gracias
Ferran



2009/9/20 Steven Davidson <srd4121 en njit.edu>:
> Hola Ferrán,
>
> Ferran Ferri wrote:
>
> [CORTE]
>
>> Yo creo que las dos hacen casi lo mismo a diferencia de que
>> addlistener lleva un vector en vez de un queue. Pero la primera va
>> bien, y la he comprobado, pero la segunda no me compila. El
>> compilador, VStudio.NET 2008 me da un error como este:
>>
>> 1>Compilando...
>> 1>GlobalLog.cpp
>>
>> 1>c:\users\ferran\directo\openglprojects\centrallog\centrallog\globallog.cpp(48)
>> : error C2665: 'std::pair<_Ty1,_Ty2>::pair' : ninguna de las 3
>> sobrecargas pudo convertir todos los tipos de argumento
>> 1>        with
>> 1>        [
>> 1>            _Ty1=std::string,
>> 1>            _Ty2=tools::GLog::CGlobalLog::t_ListenerVectorMap *
>> 1>        ]
>> 1>        c:\program files (x86)\microsoft visual studio
>> 9.0\vc\include\utility(40): puede ser
>> 'std::pair<_Ty1,_Ty2>::pair(const _Ty1 &,const _Ty2 &)'
>> 1>        with
>> 1>        [
>> 1>            _Ty1=std::string,
>> 1>            _Ty2=tools::GLog::CGlobalLog::t_ListenerVectorMap *
>> 1>        ]
>> 1>        al hacer coincidir la lista de argumentos '(std::string,
>> tools::GLog::CGlobalLog::t_ListenerVector *)'
>>
>
> Viendo los mensajes de error y el código que has escrito, el problema está
> aquí:
>
> void CGlobalLog::addListener( IListener* listener, std::string
> loggerGroup /*= "[GLOBAL]"*/ )
> {
>  t_ListenerVectorMap::iterator it = listenerVectorMap.find(loggerGroup);
>  // Si el listener no esta asociado a ningun loggerGroup lo añadimos aqui
>  if (it == listenerVectorMap.end())
>  {
>
> listenerVectorMap.insert(std::pair<std::string,t_ListenerVectorMap*>(loggerGroup,new
> t_ListenerVector()));
>  }
> }
>
> La línea causante es:
>
> listenerVectorMap.insert( std::pair<std::string,t_ListenerVectorMap*>(
> loggerGroup, new t_ListenerVector() ) );
>
> La pareja es de una cadena 'std::string' y un puntero: 't_ListenerVector *'.
> Por lo tanto, esto debería ser,
>
> listenerVectorMap.insert( std::pair<std::string,t_ListenerVector *>(
> loggerGroup, new t_ListenerVector ) );
>
>
> También deberías eliminar los paréntesis al instanciar objetos sin
> parámetros con 'new'. Esto es,
>
> new t_msgQueue
>
> y no,
>
> new t_msgQueue()
>
> Al igual que,
>
> new t_ListenerVector
>
> en vez de,
>
> new t_ListenerVector()
>
>
> Espero que esto te ayude.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>




Más información sobre la lista de distribución Cconclase