【问题标题】:Create function that returns a QList<int>创建返回 QList<int> 的函数
【发布时间】:2012-10-25 23:17:08
【问题描述】:

来自 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;
}

如果使用正确语法的文档或函数的链接,我将不胜感激

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    错误是指您试图在非指针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

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

    由于您是 C++ 新手,我建议您查看 this question

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

    【讨论】:

    • 谢谢。所以一般来说,如果我使用'new'关键字,存储将在堆上创建,我需要使用指针来引用该存储位置? (是的..我剪切并粘贴代码并将返回值放在错误的位置。它应该低几行......我将编辑问题)
    • @DarwinIcesurfer 是的,这通常是正确的,尽管它比这更复杂。查看解引用运算符、地址运算符以及值、引用和指针的使用的教程/示例。可能还值得研究指针算法。
    • Qt 从 4.8 开始就具有积极的右值支持,因此第二个变体比第一个变体更安全甚至更快。因为类别 var 将被移动(而不是复制)到外部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多