没有用于初始化Qt的匹配构造函数

时间:2015-03-11 12:43:39

标签: c++ qt

我在我的一个编程模块上做了一个分配而且有点卡住了。

每当我创建一个certian类的对象时,我都会继续使用Error no Matching Constructors进行初始化。

可能还有其他一些错误,我仍然忙于设置所有内容。我的课程设置正确吗?

SavingsAccount.h

#ifndef SAVINGSACCOUNT_H
#define SAVINGSACCOUNT_H
#include "transaction.h"
#include <QString>
#include <QList>
#include <QDate>
class SavingsAccount
{
public:

    SavingsAccount (QString name, QString num);
    ~SavingsAccount();

    QList<Transaction> addTransaction(Transaction T);
    double totalTransactionCost();
    QString frequentTransactionType();
    QList<Transaction> transactionsOnAdate(QDate date);
    QString toString();

private:
    QString m_CustomerName;
    QString m_AccountNumber;
    QList<Transaction> m_TransactionList;
};

#endif // SAVINGSACCOUNT_H

SavingsAccount.cpp

#include "savingsaccount.h"
#include <QString>
#include <QList>
#include <iostream>
using namespace std;

SavingsAccount::SavingsAccount(QString name, QString num){
     m_CustomerName = name;
     m_AccountNumber = num;
}

SavingsAccount::~SavingsAccount(){

}

QList<Transaction> SavingsAccount::addTransaction(Transaction t){

}

QString SavingsAccount::frequentTransactionType(){

}

QString SavingsAccount::toString(){

}

double SavingsAccount::totalTransactionCost(){

}

QList<Transaction> SavingsAccount::transactionsOnAdate(QDate date){

}

Main.cpp的

#include <QCoreApplication>
#include "transaction.h"
#include "savingsaccount.h"
#include <string>
#include <iostream>

using namespace std;


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

    string accName;
    int accNum;

    cout << "Enter Account Name: "<< endl;
    cin >> accName;
    cout<<"Enter Account Number: " <<endl;
    cin >> accNum;
    SavingsAccount accholder1(accName,accNum);


    return a.exec();
}

非常感谢。我真的很喜欢这个主题,所以不要笑; - )

2 个答案:

答案 0 :(得分:1)

您正在使用std::string创建对象,但您的构造函数需要QString。截至Qt 4(不知道Qt 5是否允许此操作),没有从std::stringQString的隐式转换。

将指针传递给以null结尾的char数组:

SavingsAccount accholder1(accName.c_str(), accNum);

或直接使用QString来阅读帐户名称。

编辑:我刚刚注意到你的构造函数需要2 QStrings,但你传递一个int作为第二个参数。您可以使用静态函数QString将数字转换为QString::number

答案 1 :(得分:0)

问题是你正在创建一个对象而没有将正确的参数传递给构造函数。

例如,如果你有一个带有像这样的构造函数的类SomeClass

SomaClass(Qstring s1)

你不能像这样创建一个SomeClass;

SomaClass t;

你必须改为创建:

SomeClasst t("text");