在B类

时间:2015-07-13 16:13:38

标签: c++ qt class oop

我试图制作一个简单的货币转换器,我的班级有一些问题需要进行计算。 我想在MainWindow中创建这个类的对象,以使用total变量在appi表单的小部件中显示结果。

会员功能还没有到来,但我遇到的问题是我得到了 '计算器' :mainwindow.cpp中没有适当的默认构造函数可用错误

虽然我知道这意味着什么,但我不知道如何避免(解决)这个问题,因为我需要地图上的参考来获得所需的汇率。

的.cpp

#include <QObject>
#include <QString>
#include <QDebug>
#include <ui_mainwindow.h>

class Calculator
{
public:
    explicit Calculator(QMap<QString,double> &currency_map);
    void multiply(double x, double y);
    void getValues(QString strFrom, QString strTo);

private:
    double total, firstCurr, secondCurr;
    QMap<QString,double> &map;
};

·H

#include "calculator.h"

Calculator::Calculator(QMap<QString,double> &currency_map):map(currency_map)
{
    total = 0;
    firstCurr = 0;
    secondCurr= 0;
}

void Calculator::getValues(QString strFrom, QString strTo)
{
      QMapIterator<QString, double> i(map);
    while(i.hasNext())
        {
            if(i.key() == strFrom)
                firstCurr=i.value();
            if(i.key() == strTo)
                secondCurr = i.value();
    }
}

void Calculator::multiply(double x, double y)
{
    total = x * y;
}

现在我试图在我的MainWindow类中创建该类的对象:

#include <QMainWindow>
#include <ui_mainwindow.h>
#include "calculator.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QMap<QString,double> &currency_map, QWidget *parent = 0);

    ~MainWindow();

private:
    Ui::MainWindow *ui;
    parser currency_parser;
    Calculator calc; // error

};

MainWindow.h

MainWindow::MainWindow(QMap<QString, double> &currency_map, QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->from_Combox->addItems(currency_parser.currency_list);
    ui->to_Combox->addItems(currency_parser.currency_list);
}

背后的想法是我在我的主要地方有一个地图,我保存所需的所有数据并将地图传递给使用它的类。

我发布我的主要内容即使我不确定是否需要

#include "downloader.h"
#include "mainwindow.h"
#include "parser.h"
#include "calculator.h"
#include <QApplication>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMap<QString,double> currency_map;

    downloader d;
    d.Do_download();

    parser p;
    p.read_line(currency_map);

    MainWindow w(currency_map);
    w.show();

    return a.exec();
};

1 个答案:

答案 0 :(得分:1)

发生错误,因为您没有在Calculator构造函数成员初始化列表中指定类MainWindow的相应构造函数(编译器希望使用默认构造函数):

MainWindow::MainWindow(QMap<QString, double> &currency_map, QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, calc(currency_map) // <<<<<<<<<<<<<<
{
    // ...
}