初始化列表:初始化时无法将“Participant”转换为“unsigned int”

Eri*_*son 2 c++ gcc linked-list initializer-list c++11

尝试编译一个存储“参与者”的简单链表时,我遇到了一个非常奇怪的错误。但是我清楚地给了它正确的数据,这可以得到确认,因为它在不使用初始化列表时有效(执行赋值运算符“=”)。

下面是相关的代码块:

struct Participant
{
    unsigned startNumber;
    std::string forename;
    std::string surname;
    std::string club;
    float finishTime;
};

struct ListNode
{
    ListNode* next;
    Participant data;
};

Participant tempData {list->data}; //error occurs here.
Run Code Online (Sandbox Code Playgroud)

以下是我得到的错误:

List.cpp:15:36: error: cannot convert ‘Participant’ to ‘unsigned int’ in initialization
Run Code Online (Sandbox Code Playgroud)

更换:

Participant tempData {list->data};
Run Code Online (Sandbox Code Playgroud)

和:

Participant tempData = list->data;
Run Code Online (Sandbox Code Playgroud)

编译并顺利运行。

g++ (Debian 4.7.2-5) 4.7.2
CrunchBang (Debian 7 'Wheezy')
Run Code Online (Sandbox Code Playgroud)

关于问题出在哪里的任何想法?任何帮助是极大的赞赏!

最好的问候,埃里克·詹森

Lig*_*ica 5

您正在尝试执行 a 的聚合初始化Participant,其中第一个元素是 a unsigned int。当然,您在该初始化列表中给出的一个参数与该初始化不匹配。

我想说这是一个很好的例子,说明为什么{}无缘无故地切换到 C++11 风格的初始化是容易出错的。

出什么问题了:

Participant tempData = list->data;
Run Code Online (Sandbox Code Playgroud)

或者:

Participant tempData(list->data);
Run Code Online (Sandbox Code Playgroud)