You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt编写货币转换按钮槽函数on_btnConvert_clicked编译报错求助

问题根因

4个编译错误全是**槽函数头后面漏了左大括号{**导致的基础语法错误,和你加的KRW、JPY分支逻辑没关系,只是加完代码长度上来之后编译器才抛出明确报错。
你现在的函数开头是这么写的:

void MainWindow::on_btnConvert_clicked()

double value, result = 0.0;
QString currency;
// 后面一堆逻辑

C++规定函数体必须用成对大括号包起来,你只在所有逻辑最后写了右大括号},函数头后面的左大括号完全没写,编译器根本识别不出来后面的代码属于这个槽函数,自然会报一堆「else没有匹配的if」「不允许在函数外写声明」之类的错误,凑够4个和你遇到的情况完全对应。

修复方法
  • 先解决编译错误:在void MainWindow::on_btnConvert_clicked()这行的下一行补上左大括号{就行,补完开头结构如下:
void MainWindow::on_btnConvert_clicked()
{
    double value, result = 0.0;
    QString currency;
    // 后面你原来写的代码一行都不用动

就补这一个符号,4个编译错误直接全部消失,程序就能正常编译跑起来。

  • 建议顺手修下逻辑bug:你新加的KRW、JPY分支汇率全写反了,现在的数值算出来结果完全不对:
    • 韩元的汇率差了3个数量级:1韩元大概换0.00063英镑、0.00077美元、0.00073欧元、0.105日元,你现在写的0.63、0.77相当于1韩元值5块人民币,完全错了
    • 日元的转换方向搞反了:1日元大概换0.006英镑、0.0074美元、0.007欧元、9.5韩元,你现在写的166、136相当于1日元值上千元人民币,属于把“1英镑换166日元”反过来写成“1日元换166英镑”了
修正后可直接用的完整代码
void MainWindow::on_btnConvert_clicked()
{
    double value, result = 0.0;
    QString currency;

    ui->lblGbp->setText("");
    ui->lblUsd->setText("");
    ui->lblEur->setText("");
    ui->lblJpy->setText("");
    ui->lblKrw->setText("");

    value = ui->txtAmount->text().toDouble();
    currency = ui->cbCurrency->currentText();

    if (currency == "GBP")
    {
        if(ui->cbGbp->isChecked())
        {
            ui->lblGbp->setText(QString::number(value)+" pound = "+QString::number(value)+" pound");
        }
        if (ui->cbUsd->isChecked())
        {
            result = value*1.22;
            ui->lblUsd->setText (QString::number(value)+" pound = "+QString::number(result)+" usd");
        }
        if (ui->cbEur->isChecked())
        {
            result = value*1.15;
            ui->lblEur->setText (QString::number(value)+" pound = "+QString::number(result)+" euro");
        }
        if (ui->cbJpy->isChecked())
        {
            result = value*166;
            ui->lblJpy->setText (QString::number(value)+" pound = "+QString::number(result)+" yen");
        }
        if (ui->cbKrw->isChecked())
        {
            result = value*1578;
            ui->lblKrw->setText (QString::number(value)+" pound = "+QString::number(result)+" won");
        }

    }
    else if (currency == "USD")
    {
        if(ui->cbGbp->isChecked())
        {
            result = value*0.81;
            ui->lblGbp->setText(QString::number(value)+" usd = "+QString::number(result)+" pound");
        }
        if (ui->cbUsd->isChecked())
        {
            ui->lblUsd->setText (QString::number(value)+" usd = "+QString::number(value)+" usd");
        }
        if (ui->cbEur->isChecked())
        {
            result = value*0.94;
            ui->lblEur->setText (QString::number(value)+" usd = "+QString::number(result)+" euro");
        }
        if (ui->cbJpy->isChecked())
        {
            result = value*135;
            ui->lblJpy->setText (QString::number(value)+" usd = "+QString::number(result)+" yen");
        }
        if (ui->cbKrw->isChecked())
        {
            result = value*1283;
            ui->lblKrw->setText (QString::number(value)+" usd = "+QString::number(result)+" won");
        }

    }
    else if (currency == "EUR")
    {
        if(ui->cbGbp->isChecked())
        {
            result = value*0.86;
            ui->lblGbp->setText(QString::number(value)+" eur = "+QString::number(result)+" pound");
        }
        if (ui->cbUsd->isChecked())
        {
            result = value*1.05;
            ui->lblUsd->setText (QString::number(value)+" eur = "+QString::number(result)+" usd");
        }
        if (ui->cbEur->isChecked())
        {
            ui->lblEur->setText (QString::number(value)+" eur = "+QString::number(value)+" euro");
        }
        if (ui->cbJpy->isChecked())
        {
            result = value*143;
            ui->lblJpy->setText (QString::number(value)+" eur = "+QString::number(result)+" yen");
        }
        if (ui->cbKrw->isChecked())
        {
            result = value*1361;
            ui->lblKrw->setText (QString::number(value)+" eur = "+QString::number(result)+" won");
        }

    }
    else if (currency == "KRW")
    {
        if(ui->cbGbp->isChecked())
        {
            result = value*0.00063;
            ui->lblGbp->setText(QString::number(value)+" won = "+QString::number(result)+" pound");
        }
        if (ui->cbUsd->isChecked())
        {
            result = value*0.00077;
            ui->lblUsd->setText (QString::number(value)+" won = "+QString::number(result)+" usd");
        }
        if (ui->cbEur->isChecked())
        {
            result = value*0.00073;
            ui->lblEur->setText (QString::number(value)+" won = "+QString::number(result)+" euro");
        }
        if (ui->cbJpy->isChecked())
        {
            result = value*0.105;
            ui->lblJpy->setText (QString::number(value)+" won = "+QString::number(result)+" yen");
        }
        if (ui->cbKrw->isChecked())
        {
            ui->lblKrw->setText (QString::number(value)+" won = "+QString::number(value)+" won");
        }

    }
    else if (currency == "JPY")
    {
        if(ui->cbGbp->isChecked())
        {
            result = value*0.006 ;
            ui->lblGbp->setText(QString::number(value)+" yen = "+QString::number(result)+" pound");
        }
        if (ui->cbUsd->isChecked())
        {
            result = value*0.0074 ;
            ui->lblUsd->setText (QString::number(value)+" yen = "+QString::number(result)+" usd");
        }
        if (ui->cbEur->isChecked())
        {
            result = value*0.007 ;
            ui->lblEur->setText (QString::number(value)+" yen = "+QString::number(result)+" euro");
        }
        if (ui->cbJpy->isChecked())
        {
            ui->lblJpy->setText (QString::number(value)+" yen = "+QString::number(value)+" yen");
        }
        if (ui->cbKrw->isChecked())
        {
            result = value*9.5;
            ui->lblKrw->setText (QString::number(value)+" yen = "+QString::number(result)+" won");
        }
    }
}

另外提一句,你代码里写的ui ->txtAmount这种->两边加空格的写法完全符合C++语法,不用改。

内容的提问来源于stack exchange,提问作者pil pil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:39:18