сравнение между QAbstractButton и QPushButton* не хватает приведения

мой код приведен ниже. Когда я пытаюсь скомпилировать это, я получаю:

ошибка: 29: 38 сравнение между различными типами указателей QAbstractButton и QPushButton* отсутствует приведение -> 'if (stdmetBox.clickedButton () = = stdButton)'

система: Amazon Kindle Fire 7 " работает Cyanogenmod 11.0 (Android 4.4.2 Kitkat) Компилятор: G++ / GCC (GCC для плагина C4droid версии 4.9.1) IDE: c4droid с плагинами SDL, GCC и Ministro

любая помощь будет очень признателен. Я искал, но единственный экземпляр, который я могу найти, - это iOS.

#include <fstream>
#include <QApplication>
#include <QLabel>
#include <QMessageBox>
#include <QString>
#include <QAbstractButton>
#include <QInputDialog>
#include <QDebug>

using namespace std;

int setup() 
{
    string unitchar;
    string unitcharo;
    bool setupSuccess;
    int returncode;
    QMessageBox msgBox;
    QMessageBox stdmetBox;
    QMessageBox ynBox;

    msgBox.setText("Welcome to Tyler's Fitness App! This app will help you with your fitness goals, whatever they may be. Let's get you set up!");
    msgBox.exec();

    QPushButton *stdButton = stdmetBox.addButton(QT_TR_NOOP("Standard"), QMessageBox::ActionRole);
    QPushButton *metButton = stdmetBox.addButton(QT_TR_NOOP("Metric"), QMessageBox::ActionRole);                                                
    stdmetBox.exec();

    if (stdmetBox.clickedButton() == stdButton)
    {
        unitchar = "standard";
        unitcharo = "metric";
    }
    else if (stdmetBox.clickedButton() == metButton)
    {
        unitchar = "metric";
        unitcharo = "standard";
    }
    else
    {
        setupSuccess = false;
        returncode = 0;
        return returncode; 
    }

    if (unitchar == "standard")
    {
        ynBox.setInformativeText("Standard units include feet, miles, mph, pounds, etc.");
    }
    else 
    {
        ynBox.setInformativeText("Metric units include meters, kilometers, kph, kilograms, etc.");
    } 

    QPushButton *yesButton = ynBox.addButton(QT_TR_NOOP("Yes"), QMessageBox::ActionRole);
    QPushButton *noButton = ynBox.addButton(QT_TR_NOOP("No"), QMessageBox::ActionRole);
    ynBox.setText("Is that okay?")
    while (ynBox.clickedButton() == noButton)
    {
        if (unitchar == "standard")
        {
            unitchar = "metric";
            unitcharo = "standard";
        }
        else 
        {
            unitchar = "standard";
            unitcharo = "metric";
        }
        if (unitchar == "standard")
        {
            ynBox.setInformativeText("Standard units include feet, miles, mph, pounds, etc.");
        }
        else 
        {
            ynBox.setInformativeText("Metric units include meters, kilometers, kph, kilograms, etc.");
        }
        result = ynBox.exec();
    }

    if (unitchar == "standard")
    {
        msgBox.setText("Great! You've selected standard units.");
        msgBox.exec();
        setupSuccess = true;

    }
    else 
    {
        msgBox.setText("Great! You've selected metric units.");
        msgBox.exec();
        setupSuccess = true;
    }

    if (setupSuccess != true)
    {
        returncode = 0;
    }
    else if (unitchar == "standard")
    {
        returncode = 1;
    }
    else
    {
        returncode = 2;
    }
    return returncode;                      
}                       

int main(int argc, char* argv[])
{ 
    QApplication app(argc, argv);  
    unitmaster = setup();
    if ((unitmaster == 1) || (unitmaster == 2))
    {
        QMessageBox successBox;
        successBox.setText("The program has completed successfully!");
        successBox.exec();
    }
    else 
    {
        QMessageBox errorBox;
        errorBox.setText("The program has completed successfully!");
        errorBox.exec();
    }            
    return app.exec();
}

1 ответов


вы, кажется, забыли включить <QPushButton> даже если вы используете QPushButton таким образом, который требует его определения. Один из заголовков должен был объявить его, потому что он распознается как тип, но если он неполный, то компилятор не будет знать, что QPushButton* преобразован в QAbstractButton*.

как правило, всегда включайте заголовки, определяющие типы, которые вы используете, если вы не уверены, что объявления достаточно. Неявные преобразования в базовый указатель-это вещь это требует определения.