2014-11-25 8 views
1

Я хотел бы запустить приложение в qt creator. Но когда я нажимаю на сборке, он показывает ошибку в 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 
} 

Это показывает ошибку

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

в структура эмитента issuerInfo;

+1

Не имеет смысла помечать этот вопрос ** как ** C, так и C++, потому что это означает что-то другое в C и C++. В C (99) это действительный код, в C++, это не так. Итак, на каком языке вы используете? –

+0

@ TheParamagneticCroissant Вы, похоже, смущены. Это явно C++, а не C. –

+2

Конструкция, которую вы используете ('(type) {initialiser}'), является сложным литералом; это C11 или любой GNU C/C++, но насколько я знаю, он не является стандартным C++ и MSVC его не поддерживает. Перепишите свой код. – keltar

ответ

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 
} 

Есть и другие способы сделать то же самое, конечно.

Смежные вопросы