从'int'到'QString *'的无效转换

时间:2014-01-27 21:46:12

标签: c++ qt

基本上我正在返回尝试将整数计数器返回到我的主程序但是我收到错误消息:

invalid conversion from 'int' to 'QString*' [-fpermissive]
    return counter;

即使counter是一个整数。这可能是一个非常简单的基本问题,我为此道歉,但任何输入/解释都将不胜感激。

功能:

QString* MainWindow::sort(QString* a, int n, QString na)
{
    int yes = 1, i;
    int counter=0;
    int j=0;
    for (i = 0; i < n; ++i)
    {
       if (a[i] == na)
       {
                counter++;
                qDebug() << "Found a duplicate of " << a[i];
                yes = 0;
       }
    }
    if (yes)
    {
    qDebug() << "No duplicates";
    }

    qDebug() << counter;

   return counter;
}

4 个答案:

答案 0 :(得分:1)

问题很简单;您的函数应该返回QString *(根据QString* MainWindow::sort( ... )),但您尝试返回counter,这是int(根据int counter = 0; })。

C ++不会隐式地将int转换为QString * - 如果这真的是你想做的事情(在这种情况下,这不是你想做的事情),您需要使用类似static_cast<QString *>(counter);的内容明确地强制转换它。

然而,在你的情况下,你只是一个不匹配,你应该决定 - 你想要返回计数器,还是你想要返回字符串?在第一种情况下,您将功能声明更改为int MainWindow::sort( ... )这就是您在OP中想要表达的内容。)。

在第二种情况下,您需要说return counter;或类似内容,而不是说return a;。但是,由于该函数在就地对字符串进行操作(即不在其副本上),因此这不是必需的。

答案 1 :(得分:1)

为了返回指向QString的指针,您可以使用复制构造函数在免费商店上创建QString,这将使用QString创建的counter int

QString* MainWindow::sort(QString* a, int n, QString na)
{
    int yes = 1, i;
    int counter=0;
    //...
    return new QString( QString::number( counter));
}

您的代码无法编译,因为无法将int隐式转换为QString。但是,您不应该将指针传递给QString,只需返回QString

QString MainWindow::sort(QString* a, int n, QString na)
{
    int yes = 1, i;
    int counter=0;
    //...
    return QString::number( counter);
}

答案 2 :(得分:0)

您的函数被声明为返回QString*并且您返回一个整数。这是不匹配的。

我认为真正的'修复'是纠正函数原型以返回整数int MainWindow::sort(QString* a, int n, QString na),或者如果这不在您的控制范围内,那么您就没有正确实现该函数。

答案 3 :(得分:0)

整数表达式(值为0的常量整数表达式除外)可能不会隐式转换为指针。并且错误消息说明了这个限制。

还完全不清楚为什么你要将计数器转换为QString指针/