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

时间:2013-12-12 19:16:39

标签: c++ gcc c++11 linked-list initializer-list

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

Bellow是相关的代码块:

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.

以下是我得到的错误:

List.cpp:15:36: error: cannot convert ‘Participant’ to ‘unsigned int’ in initialization

更换:

Participant tempData {list->data};

使用:

Participant tempData = list->data;

编译并顺利运行。

g++ (Debian 4.7.2-5) 4.7.2
CrunchBang (Debian 7 'Wheezy')

关于问题是什么的任何想法? 非常感谢任何帮助!

最诚挚的问候,Erik Jansson

1 个答案:

答案 0 :(得分:4)

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

我想说这是一个很好的例子,说明为什么绝对无处不在切换到C ++ 11风格的{}初始化,无论如何都容易出错。

有什么问题:

Participant tempData = list->data;

或:

Participant tempData(list->data);