Constructor para la clase 'Qsharedpointer ' se declara 'explícito' - cómo resolver este error

StackOverflow https://stackoverflow.com/questions/5396554

  •  28-10-2019
  •  | 
  •  

Pregunta

Recibo el siguiente error al intentar usar:

typedef QSharedPointer<Test> CTest


CTest* Module::function(params)
{
    CTestNew* ptr = new CTestNew(params);

    dosomething();

    return ptr;
}

Luego reemplace la prueba* con CTEST en el código. ¿Qué me estoy perdiendo?

error C2664: 'QSharedPointer<T>::QSharedPointer(const QSharedPointer<T> &)' : cannot convert parameter 1 from 'CTestNew*' to 'const QSharedPointer<T> &'
            with
            [
               T=Test
            ]
            Reason: cannot convert from 'CTestNew *' to 'const QSharedPointer<T>'
            with
            [
                T=Test
           ]
            Constructor for class 'QSharedPointer<T>' is declared 'explicit'
            with
            [
                T=Test
            ]
¿Fue útil?

Solución

El error del compilador dice que CTestNew no es lo mismo que Test

Editar: en respuesta a los comentarios diciendo CTestNew es una subclase del resumen Test

CTest* Module::function(params)
{
    CTestNew* ptr = new CTestNew(params);
    dosomething();
    return ptr;
}

debiera ser:

CTest Module::function(params) // Don't return a pointer to a shared pointer
{
    Test * ptr = new Test(params); // You're using Test not CTestNew in the CTest typedef
    dosomething();
    return CTest(static_cast<Test *>(ptr));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top