如何在c ++中使用结构列表

Hal*_*ona 3 c++ struct list

我想构建一个包含Headers列表的struct Packet.我使用的相关代码:

//Packet.h
#include <list>

using namespace std;

struct Header {
    Header();
    bool Valid;
    long unsigned DestAddr:48;
};

struct Packet_t {
    Packet_t();
    list<Header> Headers;
};
Run Code Online (Sandbox Code Playgroud)

现在我尝试构建Packet_t的构造函数,该构造函数将初始化Headers列表以仅包含一个头 - FirstHeader:

//Packet.cpp
#include "Packet.h"

Header::Header() {
    Valid = false;
    DestAddr = 0;
};

Packet_t::Packet_t(){
    ValidPacket = false;
    Header FirstHeader(); //here I try to initialize the first Header using its constructor
    Headers.push_front(FirstHeader);
};
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Packet.cpp:错误:没有匹配函数来调用'std :: list> :: push_front(Header(&)())'

真的很感激任何帮助

jua*_*nza 7

这是一个函数声明:

Header FirstHeader();  // function FirstHeader, returns a Header
Run Code Online (Sandbox Code Playgroud)

你需要的是什么

Headers.push_front(Header());
Run Code Online (Sandbox Code Playgroud)

要么

Headers.emplace_front(); // default constructs FirstHeader object in place
Run Code Online (Sandbox Code Playgroud)

或者,如果您在推送之前需要一个实例来处理,

Header FirstHeader;
// ... do stuff to Header

Headers.push_front(FirstHeader);
Run Code Online (Sandbox Code Playgroud)

或者,使用构造函数初始化列表使用一个元素初始化列表:

Packet_t::Packet_t() : Headers(1) // or Headers{Header(args....) if need args
{

}
Run Code Online (Sandbox Code Playgroud)

  • @ÁtilaNeves这不是MVP.它只是一个声明性的失误.一个MVP在尝试类似的东西时跳闸,但实际上提供了一个构造参数,*也*恰好是一个直接构造的temp:例如,考虑:`Something obj(Thing())`. (2认同)