Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 类'的构造函数;QSharedPointer<;T>';声明为';显式';-如何解决此错误_Qt_Qsharedpointer - Fatal编程技术网

Qt 类'的构造函数;QSharedPointer<;T>';声明为';显式';-如何解决此错误

Qt 类'的构造函数;QSharedPointer<;T>';声明为';显式';-如何解决此错误,qt,qsharedpointer,Qt,Qsharedpointer,尝试使用时出现以下错误: typedef QSharedPointer<Test> CTest CTest* Module::function(params) { CTestNew* ptr = new CTestNew(params); dosomething(); return ptr; } typedef QSharedPointer CTest CTest*模块::函数(参数) { CTestNew*ptr=新CTestNew(参数); do

尝试使用时出现以下错误:

typedef QSharedPointer<Test> CTest


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

    dosomething();

    return ptr;
}
typedef QSharedPointer CTest
CTest*模块::函数(参数)
{
CTestNew*ptr=新CTestNew(参数);
dosomething();
返回ptr;
}
然后将代码中的Test*替换为CTest。 我错过了什么

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
            ]
错误C2664:'QSharedPointer::QSharedPointer(const QSharedPointer&'):无法将参数1从'CTestNew*'转换为'const QSharedPointer&'
具有
[
T=试验
]
原因:无法从“CTestNew*”转换为“const QSharedPointer”
具有
[
T=试验
]
类“QSharedPointer”的构造函数声明为“显式”
具有
[
T=试验
]

编译器错误指出
CTestNew
Test

CTest* Module::function(params)
{
    CTestNew* ptr = new CTestNew(params);
    dosomething();
    return ptr;
}
编辑:回应评论说,
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));
}
CTest Module::function(params)//不要返回指向共享指针的指针
{
Test*ptr=new Test(params);//您正在CTest typedef中使用Test not CTestNew
dosomething();
返回CTest(静态施法(ptr));
}

不要在需要使用
Test
的地方使用
CTestNew
@Ronny:他正在做
ctestfoo(new-CTestNew)
或类似的事情,他应该在那里做
ctestfoo(new-Test)
-至少编译器错误是这么说的。我明白了。在这种情况下,你是对的。他需要澄清这一点。@Rony/Erik:谢谢你的评论。有一个函数Test*函数(参数),其中创建了指向CTestNew的指针。CTestNew*ptr=dosomething(),此函数返回CTestNew。它在我添加typedef之前就起作用了,因为CTestNew是从Test继承的。在这种情况下我应该进行类型转换吗?CTest*Module::function(params){CTestNew*ptr=new CTestNew(params);dosomething();return ptr;}您应该为您的问题提供一个更清晰的标题以获得更好的答案;)