问题标签 [unions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++联合赋值,有没有好办法呢?
我正在与图书馆合作,我必须与工会合作。具体来说,我正在使用 SDL 和SDL_Event union。我需要制作 SDL_Events 的副本,并且找不到关于使用联合重载赋值运算符的好信息。
假设我可以重载赋值运算符,我应该手动筛选工会成员并复制相关成员,还是我可以简单地来一些成员(这对我来说似乎很危险),或者只是使用 memcpy() (这看起来简单快捷,但有点危险)?
如果我不能重载运算符,那么我最好的选择是什么?我想我可以制作新副本并传递一堆指针,但在这种情况下,我宁愿不这样做。
欢迎任何想法!
编辑:根据要求的错误消息,顺便说一句,我想我学到了一些东西......
physworld.cpp:325: error: no match for ‘operator=’ in ‘CurrentEvent = ((physworld*)this)->physworld::SDL_UserInputEvents.std::queue<_Tp, _Sequence>::pop [with _Tp = SDL_Event, _Sequence = std::deque<SDL_Event, std::allocator<SDL_Event> >]()’ /usr/include/SDL/SDL_events.h:220: note: candidates are: SDL_Event& SDL_Event::operator=(const SDL_Event&)
EDIT2:这太愚蠢了......我认为 Deqeus pop() 成员返回了删除的项目。我以为代码太简单了,不能直接是我的代码,但事实证明这是错误的。
我的代码看起来像:
因此,如果不出意外,我将学习更仔细地查看我最近没有使用过的容器的成员函数。感谢您解释默认情况下分配的工作,否则将需要更长的时间才能找到它。
c++ - 使用联合标记引用结构内的联合会给出不正确的地址
我需要在如下定义的结构中声明一个联合:
最初,我尝试按如下方式访问联合数据(在添加 m_Data 声明之前):
这会编译,但会向 pBuff 返回指向 MyStruct 结构开头的指针,当我认为我正在写入 m_Buff 缓冲区时,这会导致我覆盖 m_DataType 和 m_DataLength 成员。
我正在使用 Visual Studio 2008。任何人都可以解释这种意外行为吗?谢谢。
c++ - 增量联合?
我试图用联合声明来描述 C++ 中的数独板:
电路板的每个部分是否与阵列的正确部分相对应?IE,
sec4 会与 board[4-6][0-3] 对应吗?有没有更好的方法来做这种事情(特别是描述数独板)?
c - 宏 GNU vs VS2008 中的匿名联合定义/声明
我正在尝试更改 lpc2138 的 IAR 特定头文件,以便它可以与 Visual Studio 2008 一起编译(以启用兼容的单元测试)。
我的问题涉及将寄存器定义转换为独立于硬件(不在内存地址)
“IAR 安全宏”是:
这是我可比较的“硬件独立”代码:
这可以编译并且可以工作,但很明显我的“硬件独立”用法与“IAR 安全”用法不匹配。
如何更改宏,以便可以像在 IAR 中一样使用 IO0PIN?我觉得这是一个简单的匿名工会问题,但多次尝试和变体已被证明是不成功的。也许 IAR GNU 编译器支持匿名联合,而 vs2008 不支持。
谢谢你。
c++ - C++ 联合数据结构,轻松访问 DWORD 中的位
我正在在线浏览一组 DirectX 教程,我有以下结构:
我对 directX 的基本理解使我发现颜色由 8 位 alpha、红色、绿色和蓝色通道组成。
我正在尝试向东访问这些频道。而不是多次编写以下代码(在 CUSTOMVERTEX 结构中):
我可以结合联合和结构编写一个更优雅的解决方案,例如
但是,这似乎没有按预期运行,r、g 和 b 中的值几乎与颜色相反,例如,如果颜色为 0x12345678 a = 0x78,r = 0x56。这是一个endieness问题吗?
我还可以从这个解决方案中期待什么其他问题?例如从颜色成员溢出?
我想我要问的是......有没有更好的方法来做到这一点?!
c++ - 如何将结构放在联合中
我有一个联合 X。它的大小是 64 位。如果我想访问这些 64 位,我该如何编写(如果可能)它的声明:
c++ - 如何从 C++ 源代码中提取所有类型定义、结构和联合
我继承了一个包含数百个文件的 Visual Studio 项目。
我想从每个.h/ .cpp 文件中提取所有类型定义、结构和联合,并将结果放在一个文件中)。
每个 typdef/struct/union 都应该在结果文件中的一行。这将使排序更容易。
类型定义 int myType ;
结构 myFirstStruct { char a; 诠释 b;...};
union Part_Number_Serial_Number_Part_2_Response_Message_Type {struct{Message_Response_Head_Type Head; Part_Num_Serial_Num_Part_2_Report_Array Part_2_Report;Message_Tail_Type Tail;} 数据;字节 byData[140];} myUnion ;
结构{ 布尔 c; int d;...} mySecondStruct ;
我的问题是,我不知道使用正则表达式要查找什么(typedef/structs/unions 的语法)。我不敢相信以前没有人这样做过(我用谷歌搜索并没有发现任何东西)。
有谁知道这些的正则表达式?(注意有些用 // others /* */ 注释掉了)
或实现此目的的工具。
编辑:
我正在玩弄自动生成源代码和/或对话框以修改使用底层 typedef/struct/union 的消息的想法。我打算使用输出来生成一个可以用于这个原因的 XML 文件。
这些的源代码是 C/C++ 并且在我几乎所有的项目中都使用过。这些项目通常不在 C/C++ 中。通过使用 XML 版本,我只需要在一个地方更新/添加 typedef/struct/union,所有项目都可以自动生成源和/或对话框。
c - 如果 C 结构的内存大小相等,如何将 C 结构转换为另一种结构类型?
我有 2 个矩阵结构意味着相同的数据,但具有不同的形式,如下所示:
它们的内存大小是相等的。所以我相信有一种方法可以在没有任何指针操作或复制的情况下转换这些类型:
这可能吗?当前编译器打印“错误:请求转换为非标量类型”消息。
c++ - c++ 联合表和结构表
我被告知要编写一个程序,该程序创建一个联合和结构,然后创建联合和结构的二元素数组并填充它们的字段。我创建了一个联合和一个结构,但是如何在数组中填充它们的字段?
我试过 un[0]->i1=i; 但这不是正确的方法。
c - C程序中的联合问题
我正在开发一个使用联合的 C 程序。联合定义在 FILE_A 头文件中,如下所示...
如果我在 FILE_A.c 中设置 CurrentPosition.position 的值,然后在 FILE_B.c 中调用一个使用联合的函数,联合中的数据将归零。这在下面演示。
现在,如果我将 long 传递给 SomeFunctionInFileB(long temp) 然后将其存储到该函数中的 CurrentPosition.bytes 中,最后调用 WriteBytesToFlash(CurrentPosition.bytes[n]... 它工作得很好。
CurrentPosition Union 似乎不是全球性的。所以我尝试更改头文件中的联合定义以包含这样的 extern 关键字......
然后将其放入源(.c)文件中...
但这会导致编译错误:
C:\SiLabs\Optec Programs\AgosRot\MotionControl.c:76: error 91: extern definition for 'CurrentPosition' mismatches with declaration.
C:\SiLabs\Optec Programs\AgosRot\/MotionControl.h:48: error 177: previously defined here
那么我做错了什么?如何让工会全球化?