标题:明明幾乎就照抄還是一直報錯,救命啊 到底哪裡有問題?
作者:harold00124
日期:2016-10-26 12:36
内容:
以前學生時代有接觸一些C++
後來出去工作幾年後基本上都忘了大半
現在剛換工作開始重新接觸C++
老闆培訓要我在下個月內用QT寫出一個簡單的計算器
然後我上GOOGLE找
https://dotblogs.com.tw/pin0513/2010/01/08/12930
拿這個範例當作模仿練習
幾乎都照抄了 一邊抄一邊盡量理解裡面的意思
希望自己吃透之後可以自己做一個功能更豐富的 但是卡住了
一直報錯無法執行
弄完一個又一個出來
error: prototype for 'double MainWindow::Exec(double, int, double)' does not match any in class 'MainWindow'
double MainWindow::Exec(double value1,int op,double value2){
^
error: candidate is: double MainWindow::Exec(int, int, int)
double Exec(int value1,int op,int value2);
^
而且裡面還有一些東西我還看不太懂得,
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_doubleSpinBox1_valueChanged(double value);
void on_doubleSpinBox2_valueChanged(double value);
void on_comboBox_currentIndexChanged(int index);
private:
Ui::MainWindow *ui;
double Exec(int value1,int op,int value2);
};
#endif // MAINWINDOW_H
-------------------------------------------------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
&nb ..
#1 [gnibuoz 10-26 14:54]
1. tr可以去掉,你直接写文字也没有任何问题,关于tr的用法,建议你在帮助文档里边搜索下,这个是为了方便国际化的,不过一般的程序其实用不到这个
2.修改下头文件中的函数声明,参数类型改成和源文件中一致
#2 [rotung 10-26 15:18]
......
if(ui->comboBox->currentIndex()==3 && ui->doubleSpinBox2->value()==0){//為什麼currentIndex是訂為==3 到底是怎麼判斷牠的序列的??
......
currentIndex==3明显是错误的,应该是currentIndex()==4. 从Exec函数的具体实现也可以看到第4个才是除式。
#3 [bran_lee 10-26 15:42]
1、一开始那个错误是头文件和源文件函数不一致,按返回类型是double来看,你应该改头文件的函数声明
2、currentIndex如2楼所说
3、关于tr,如1楼所说用于国际化,tr里的字符串是可以通过加载不同的翻译文件来改变的,具体用法自己研究。不过良好的习惯应该是界面显示的文字都应该用tr,我们做项目代码中是不会直接使用中文字符串的,都是后期翻译成中文。
#4 [harold00124 10-26 15:58]
非常感謝樓上三位的回答
currentIndex的部分已經弄懂了 原來我被錯誤的文章給誤導了 害我卡半天在那邊想
宣告部分我直接全部給他標頭跟cpp都用double....
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_doubleSpinBox1_valueChanged(double value);
void on_doubleSpinBox2_valueChanged(double value);
void on_comboBox_currentIndexChanged(int index);
private:
Ui::MainWindow *ui;
double Exec(double value1,double op,double value2); //setupUi(this);
connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(on_comboBox_currentIndexChanged(int)));
ui->comboBox->addItem(tr("Choose"));
ui->comboBox->addItem(tr("+"));
ui->comboBox->addItem(tr("-"));
ui->comboBox->addItem(tr("*"));
ui->comboBox->addItem(tr("/"));
if(ui->comboBox->currentIndex()==4 && ui->doubleSpinBox2->value()==0){ //
#5 回 harold00124 的帖子 [bran_lee 10-26 16:05]
harold00124:非常感謝樓上三位的回答
currentIndex的部分已經弄懂了 原來我被錯誤的文章給誤導了 害我卡半天在那邊想
宣告部分我直接全部給他標頭跟cpp都用double....
....... (2016-10-26 15:58)
c++里的switch不能用double型,只能用int型(包括其他整型)或者enum型