2014-11-25 413 views
1

我想在qt创建者中运行应用程序。但是,当我在构建点击,它显示carddetect.cpp错误:C2059:语法错误:'{'

错误错误发生在这里: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 
} 

它表示结构发行者issuerInfo错误

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

;

+1

用** C和C++标记这个问题是没有意义的,因为它意味着C和C++中的不同。在C(99)中,这是有效的代码,在C++中,它不是。那么,您使用的是哪种语言? – 2014-11-25 09:11:54

+0

@TheParamagneticCroissant你似乎很困惑。这显然是C++而不是C. – 2014-11-25 09:16:50

+2

您正在使用的构造('(type){initialiser}')是复合文字;它是C11,或任何GNU C/C++,但据我所知,它不是标准的C++,MSVC不支持它。重写你的代码。 – keltar 2014-11-25 09:21:43

回答

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 
} 

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