[C con Clase] Problemas con inicializacion de tipos
Steven Davidson
srd4121 en njit.edu
Dom Sep 20 18:09:21 CEST 2009
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
Más información sobre la lista de distribución Cconclase