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

invalid conversion from 'int' to 'QString*'

本文关键字:转换 无效 QString int      更新时间:2023-10-16

基本上我正在返回,试图将整数计数器返回到我的主程序,但我得到了错误消息:

invalid conversion from 'int' to 'QString*' [-fpermissive]
return 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;
}

为了返回指向QString的指针,您可以使用复制构造函数在免费存储中创建一个QString,该构造函数将接受从您的counter创建的QString,即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);
}

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

C++不会隐式地将int转换为QString *——如果这确实是您想要做的(在这种情况下,这不是您想要做),则需要使用类似static_cast<QString *>(counter);的方法显式地强制转换它。

然而,在您的情况下,您只是有一个不匹配,您应该决定-您想返回counter,还是想返回字符串?在第一种情况下,您需要将函数声明更改为int MainWindow::sort( ... )(这是您在操作中说过要做的操作。)。

在第二种情况下,您需要说return a;或类似的内容,而不是说return counter;。然而,由于函数是在适当的字符串上操作的(即,不是在它的副本上),所以这并不是真正必要的。

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

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

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

此外,还不清楚为什么要将计数器转换为QString指针/