2015-04-15 75 views
5

我的代码出现在下面。当我尝试编译,我得到:QAbstractButton和QPushButton之间的比较*缺少转换

error: 29:38 comparison between distinct pointer types QAbstractButton and QPushButton* lacks a cast -> 'if (stdmetBox.clickedButton() == stdButton)'

系统:亚马逊Kindle Fire 7" 运行CyanogenMod的11.0(是Android 4.4.2奇巧) 编译:G ++/GCC(海湾合作委员会为C4droid插件4.9.1版本) IDE:C4droid与SDL,GCC,以及插件部长

任何帮助将不胜感激我已经搜查,但我能找到的唯一实例是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(); 
} 
+2

即使您以需要定义的方式使用QPushButton,您似乎已经忘记了包含''。其中一个头文件必须声明它是因为它被识别为一个类,但是如果它是不完整的,那么编译器不会知道'QPushButton *'可以转换为'QAbstractButton *'。尝试添加缺少的包含,看看是否可以解决您的问题。 – user2079303

+0

我继续发布,作为答案,因为我觉得自己很有信心,即使我无法测试自己,这也是您的问题。 – user2079303

回答

5

你似乎已经忘了。包括<QPushButton>即使您以需要定义的方式使用QPushButton。其中一个头必须声明它,因为它被识别为一个类型,但是如果它不完整,那么编译器就不知道QPushButton*可以转换为QAbstractButton*

作为一般规则,除非确定声明足够,否则始终要包含定义所用类型的头文件。向基指针的隐式转换是需要定义的事情。

+0

非常好。简明的答案,解决了我的问题。为了明确,我添加了#include ,程序编译并运行成功。我很欣赏这种回应。 –