No puedo reproducir el error de compilación en vs2008 en el pequeño programa a continuación. Es probable que exista algo diferente en los archivos de inclusión, las definiciones de preprocesador o las opciones del compilador, lo que le proporciona un comportamiento diferente.
¿Puede declarar una variable simple de tipo IUnknownPtr fuera de una instrucción if?
¿Puede crear un nuevo proyecto utilizando el siguiente código sin el error?
¿Alguno de los siguientes compila OK?
if (NULL == (IUnknownPtr ptr = someOtherPtr)) {
}
IUnknownPtr foo;
bool b(foo);
El error indica que el compilador puede ver una definición de IUnknownPtr pero no puede interpretar el resultado de la asignación de un IUnknownPtr como un bool.
operator = debe devolver IUnknownPtr & (el objeto al que se ha asignado). _com_ptr_t define operador bool(). ¿Está su _COM_SMARTPTR_TYPEDEF generando referencias a _com_ptr_t o algún otro tipo? Puede encontrarlo fácilmente al eliminar temporalmente la salida del preprocesador (propiedades/C++/preprocesador/preproceso a un archivo)
#include <comdef.h>
int main(int argc, char* argv[])
{
IUnknownPtr foo;
IUnknown* foo2 = NULL;
if (IUnknownPtr foo3 = foo) {
// do something
}
if (IUnknownPtr foo4 = foo2) {
// do something
}
return 0;
}
Esto es raro. ¿Qué versión de Visual C++ usas? – sharptooth
@sharptooth: VS 2008 – fogbit
¿Por qué no está creando el puntero fuera del if? Y verificar la validez en el si? ¿O es obvio en el contexto COM? (Sin experiencia) – RvdK