Constructor para la clase 'Qsharedpointer ' se declara 'explícito' - cómo resolver este error
-
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
]
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