C++ 创建返回QList的函数<;int>;

C++ 创建返回QList的函数<;int>;,c++,qt,C++,Qt,我有C#背景,有一些习惯需要改变。我试图从函数返回一个QList。编译器错误消息是请求从“QList*”转换为非标量类型“QList”。以下是函数: QList<int> toCategories(QVariant qv) { QList<int>categories = new QList<int>(); if(qv.isValid() && qv.type() == QVariant::List) {

我有C#背景,有一些习惯需要改变。我试图从函数返回一个QList。编译器错误消息是请求从“QList*”转换为非标量类型“QList”。以下是函数:

QList<int> toCategories(QVariant qv)
{
    QList<int>categories = new QList<int>();
    if(qv.isValid() && qv.type() == QVariant::List)
    {
        foreach(QVariant category,qv.toList()){
            categories.append(category.toInt() );
        }
    }
    return categories;
}
QList toCategories(QVariant qv)
{
QListcategories=新的QList();
if(qv.isValid()&&qv.type()==QVariant::List)
{
foreach(QVariant类别,qv.toList()){
categories.append(category.toInt());
}
}
退货类别;
}

我希望您能使用正确语法链接到文档或函数。错误是指您试图在非指针
QList
到指针
QList
之间转换。您需要使用指向
QList
的指针,如下所示:

QList<int>* toCategories(QVariant qv)
{
    QList<int>* categories = new QList<int>();
    if(qv.isValid() && qv.type() == QVariant::List)
    {
        foreach(QVariant category,qv.toList()){
            categories->append(category.toInt() );
        }
        return categories;
    }
}

既然你是C++新手,我建议复习.< /P>


如果我还可以指出的话,您列出的函数有一个问题,即某个路径不返回值(尽管我怀疑这可能是因为您只复制粘贴了代码的一部分).

错误是指您试图在非指针
QList
到指向
QList
的指针之间进行转换。您需要使用指向
QList
的指针,如下所示:

QList<int>* toCategories(QVariant qv)
{
    QList<int>* categories = new QList<int>();
    if(qv.isValid() && qv.type() == QVariant::List)
    {
        foreach(QVariant category,qv.toList()){
            categories->append(category.toInt() );
        }
        return categories;
    }
}

既然你是C++新手,我建议复习.< /P>


如果我还可以指出,您列出的函数有一个问题,即某个路径不返回值(尽管我怀疑这可能是因为您只复制粘贴了代码的一部分)。

谢谢。所以一般来说,如果我使用'new'关键字,存储将在堆上创建,我需要使用一个指针来引用该存储位置?(是的..我剪切粘贴了代码,并将返回值放在了错误的位置。它应该比原来低几行…我会编辑这个问题)@DarwinIcesurfer是的,这通常是正确的,尽管比这更复杂。查看解引用运算符、运算符地址以及值、引用和指针的使用的教程/示例。Qt从4.8开始就有强大的右值支持,所以第二个版本比第一个版本更安全,甚至更快。因为分类变量将被移动(而不是复制)到外部。谢谢。所以一般来说,如果我使用'new'关键字,存储将在堆上创建,我需要使用一个指针来引用该存储位置?(是的..我剪切粘贴了代码,并将返回值放在了错误的位置。它应该比原来低几行…我会编辑这个问题)@DarwinIcesurfer是的,这通常是正确的,尽管比这更复杂。查看解引用运算符、运算符地址以及值、引用和指针的使用的教程/示例。Qt从4.8开始就有强大的右值支持,所以第二个版本比第一个版本更安全,甚至更快。因为类别变量将被移动(而不是复制)到外部。