클래스 생성자<T>'는'명시 적'으로 선언됩니다-이 오류를 해결하는 방법

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

  •  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));
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top