gpt4 book ai didi

c++ - 错误:使用插入函数将数据插入 std::map 时出现 "cannot bind packed field"

转载 作者:行者123 更新时间:2023-11-30 04:54:37 29 4
gpt4 key购买 nike

有人能告诉我 #pragma pack(push,1)__attribute__((packed)) 之间的区别吗?如果我使用第二种类型的结构包装,我会收到一个编译错误,上面写着

cannot bind packed field ‘ABC.abc::a’ to ‘unsigned int&’

但如果我使用第一种类型的结构打包,则不会出现编译错误。

这是我的示例代码:

//DataStructure.h

#ifndef DATASTRUCTURE_H_
#define DATASTRUCTURE_H_

struct abc
{
unsigned int a;
float b;
}__attribute__((packed));

#endif /* DATASTRUCTURE_H_ */



//Main.cpp
#include<iostream>
#include<map>
#include "DataStructure.h"


int main()
{
struct abc ABC;
ABC.a=3;
ABC.b=4.6f;

std::map<unsigned int,struct abc> Mapp;
Mapp.insert(std::make_pair(ABC.a,ABC));
}

最佳答案

错误来自:

std::make_pair(ABC.a,ABC);

自 C++11 起,make_pair定义为:

template< class T1, class T2 >
std::pair<V1,V2> make_pair( T1&& t, T2&& u );

所以给它 ABC.a 作为第一个参数是试图将一个左值引用绑定(bind)到一个位域(打包结构基本上是什么),which is illegal .

要解决这个问题,您必须创建一个新的 unsigned int 并用它调用make_pair:

unsigned int a = ABC.a;
Mapp.insert(std::make_pair(a,ABC));

关于c++ - 错误:使用插入函数将数据插入 std::map 时出现 "cannot bind packed field",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481636/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com