2015-04-15 77 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 ,程序編譯並運行成功。我很欣賞這種迴應。 –