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)
关于问题出在哪里的任何想法?任何帮助是极大的赞赏!
最好的问候,埃里克·詹森
您正在尝试执行 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)