错误:C2059:语法错误:' {'

时间:2014-11-25 09:06:39

标签: c++ syntax-error

我想在qt creator中运行一个应用程序。但是当我点击构建时,它在carddetect.cpp中显示错误

此处发生错误:void CardDetect::aamvaIssuerList()

但我无法找出错误是什么。

124: error: C2059: syntax error : '{'
124: error: C2143: syntax error : missing ';' before '{'
124: error: C2143: syntax error : missing ';' before '}'

这是我的代码:

#include "carddetect.h"
#include <QDebug>

void CardDetect::aamvaIssuerList(){
        issuerList [ "636026" ] =  (struct issuer) {"Arizona", "AZ", "L"};
        issuerList [ "0636021"] =  (struct issuer) { "Arkansas", "AR", "" };
        issuerList [ "636014" ] =  (struct issuer) { "California", "CA", "L" };
        issuerList [ "636020" ] =  (struct issuer) { "Colorado", "CO", "NN-NNN-NNNN" };
        issuerList [ "636010" ] =  (struct issuer) { "Florida", "FL", "LNNN-NNN-NN-NNN-N" };
        issuerList [ "636018" ] =  (struct issuer) { "Iowa", "IA", "NNNLLNNNN" };
    }

和carddetect.h是

#ifndef CARDDETECT_H
#define CARDDETECT_H

#include <QMap>
#include "magcard.h"

struct issuer {
    QString name;
    QString abbreviation;
    QString format;
};

class CardDetect {
    public:
        CardDetect( MagCard *_card = 0 );
        void setCard( MagCard *_card ); 

    private:
        MagCard *card;

        void processCard();

        void luhnCheck();
        void creditCardCheck();
        void aamvaCardCheck( QString expDate );
        void aamvaIssuerList();
        QMap<QString,struct issuer> issuerList;

};


#endif // CARDDETECT_H

该代码正在运行@keltar

但现在在此功能

void CardDetect::aamvaCardCheck( QString expDate ) {
    if( card->encoding == IATA )
        return; //we're only going to support ABA for now
    struct issuer issuerInfo;

QString iin = card->accountNumber.left( 6 );

issuerInfo = issuerList.value( iin );
if( issuerInfo.name.isEmpty() ) {
    iin = card->accountNumber.mid( 1, 6 );
    issuerInfo = issuerList.value( iin );
    if( issuerInfo.name.isEmpty() )
        return; // this is not a known AAMVA card, abort
}

显示错误

error: C2512: 'issuer' : no appropriate default constructor available
error: C2512: 'issuer::issuer' : no appropriate default constructor available

在struct issuer issuerInfo;

1 个答案:

答案 0 :(得分:1)

由于你不能使用复合文字,下面是一个如何完成它的例子:

在您的结构中添加构造函数:

struct issuer {
    issuer(const char *nm, const char *abbr, const char *fmt) : name(nm),
         abbreviation(abbr), format(fmt) {}

    QString name;
    QString abbreviation;
    QString format;
};

并将您的功能更改为:

void CardDetect::aamvaIssuerList(){
    issuerList [ "636026" ] =  issuer("Arizona", "AZ", "L");
    // same for the rest of the lines
}

当然还有其他方法可以做到这一点。