C++ 错误:C2059:语法错误:';{';

C++ 错误:C2059:语法错误:';{';,c++,syntax-error,C++,Syntax Error,我想在qt creator中运行一个应用程序。但当我单击build时,它在carddetect.cpp中显示错误 此处出现错误:void CardDetect::aamvaIssuerList() 但我不知道那个错误是什么 124: error: C2059: syntax error : '{' 124: error: C2143: syntax error : missing ';' before '{' 124: error: C2143: syntax error : missing '

我想在qt creator中运行一个应用程序。但当我单击build时,它在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" };
    }
它显示错误

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

在struct issuer issuerInfo;

中,由于不能使用复合文字,因此下面是一个如何实现的示例:

将构造函数添加到结构中:

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
}

当然,还有其他的方法。

用C和C++来标记这个问题是没有意义的,因为它在C和C++中有不同的含义。C(99)这是有效的代码,在C++中,它不是。那么,你使用哪种语言?@你似乎混淆了C++。这显然是C++而不是C。你正在使用的结构(<代码>(类型){RealalIsIs} /Cuth>)是复合文字,它是C11,或者任何GNU C/C++,但是据我所知,它不是标准C++,MSVC不支持它。重写你的代码。好的,谢谢。我是C++初学者。请你帮我换个字好吗?keltar@DavidHeffernan不,我没有感到困惑——只要看看这个问题的修订历史就可以了。我在修订时已经写下了我的评论只包含第一个代码段(一个带有C99复合文字)。在这个问题中没有有效的C++。现在很明显,OP意味着它是C++,但不幸的是它仍然不是。
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
}