2014-01-27 23 views
-2

基本上即时返回试图返回整数计数器我的主程序,但是我得到的错误消息:无效的转换,从“诠释”到“的QString *”

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; 
} 
+0

不要通过指针而是通过const引用/复制传递QStrings。几乎没有理由通过指针来处理QStrings。 –

+0

啊,阵列。 QStringList是你的朋友。 –

回答

0

为了返回一个指向QString您可以使用拷贝构造函数,将采取从你的counter这是int创建QString创建一个免费的商店QString

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); 
} 
0

你的函数声明为返回QString*,你就返回一个整数。这是不匹配的。

我认为真正的'修复'是纠正函数原型返回一个整数int MainWindow::sort(QString* a, int n, QString na)或者如果这不在你的控制之下,那么你没有实现正确的功能。

+0

但我使用排序主要是排序(reallist,x,名称) – user3183403

+0

但你打算如何处理它的返回值?即什么应该是返回值的类型?这进入函数原型。 – legends2k

0

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

而且它是完全不清楚为什么你goint柜台转换为QString指针/

1

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

C++不会隐式转换的intQString * - 如果这就是你想要做的真的是什么(在这种情况下,这是不是你想要做什么),你需要明确的强制转换,像static_cast<QString *>(counter);

然而,就你而言,你刚刚得到了一个不匹配,你应该决定 - 你想要返回计数器,还是你想返回字符串?在第一种情况下,你可以将你的函数声明更改为int MainWindow::sort(...)这就是你说的你想在你的OP中执行的操作)。

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

+0

不正确,可以从int创建QString,不需要转换 – 4pie0

+0

'QString'有一个静态工厂函数,它需要一个'int',但一个'int'不会被隐式转换为一个**指向一个QString **('QString *')。 – CmdrMoozy

+0

但你可以这样做:return new QString(QString :: number(counter)) – 4pie0

相关问题