클래스 생성자<T>'는'명시 적'으로 선언됩니다-이 오류를 해결하는 방법
-
28-10-2019 - |
문제
사용하려고 할 때 다음과 같은 오류가 발생합니다:
typedef QSharedPointer<Test> CTest
CTest* Module::function(params)
{
CTestNew* ptr = new CTestNew(params);
dosomething();
return ptr;
}
그런 다음 코드에서 테스트*를 코드로 바꿉니다.나는 무엇을 놓치고 있습니까?
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
]
해결책
컴파일러 오류가 말하는 것 CTestNew
동일하지 않습니다 Test
편집:댓글에 대한 답변으로 CTestNew
추상적인 하위 클래스입니다. Test
CTest* Module::function(params)
{
CTestNew* ptr = new CTestNew(params);
dosomething();
return ptr;
}
해야 할 일:
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));
}
제휴하지 않습니다 StackOverflow