网站建设 经典书籍,专业建设网站应该怎么做,抖音小程序锚点解绑是什么意思,北京建站设计在JSON项目中#xff0c;使用了联合体和结构体之间的嵌套#xff0c;但是在访问内部的联合体和结构体的时候出现了问题#xff0c;这篇文章作为记录#xff0c;也希望能帮助遇到相同问题的好伙伴。
struct lept_value
{union {struct str{char *s;size_t len;};double n;}…在JSON项目中使用了联合体和结构体之间的嵌套但是在访问内部的联合体和结构体的时候出现了问题这篇文章作为记录也希望能帮助遇到相同问题的好伙伴。
struct lept_value
{union {struct str{char *s;size_t len;};double n;};lept_type type;
};
上面是最原始的代码上面的代码可以通过下面的代码访问double n和lept_type type
// v是一个lept_value的指针
v-n;
v-type;
但是无法访问str结构体内部的成员。如果给结构体加上名那么连n也无法访问。例如
struct lept_value
{union m_union{struct str{char *s;size_t len;};double n;};lept_type type;
};
我用下面的代码访问发现只提示有type一个成员。 v-m_union.str; // 无法访问 v-m_union.n; //无法访问 v-type; // 可以访问 后来通过翻译将问题翻译成英文
如何访问结构体内部的联合体中的变量-How do I access variables in a union inside a struct
之后放到StackOverflow上进行了查询很快有了结果原解释如下c - Accessing a variable in a union which is inside a class - Stack Overflow
typedef struct {union {struct { char* s; size_t len; }s; /* string: null-terminated string, string length */double n; /* number */}u;lept_type type;
}lept_value;
参考了c语言的代码和StackOverflow上的回答发现自己简直s b一个。
问题的原因在于我的代码中只是声明了结构体但是实际上并没有生成实际的对象根本就没有这个成员因此当然无法访问。就像使用lept_value这个数据结构需要一个实际的对象才会分配内存光给出声明怎么会允许访问呢将代码修改成如下加入了m_data和m_union意味着默认有这两个实例有了实例之后一切的访问都可以了struct和union默认访问权限是public。
struct lept_value
{union {struct str{char *s;size_t len;}m_data;double n;}m_union;lept_type type;
};// 访问方式
v-m_union.m_data.s;
v-m_union.n;
v-m_union_m_data.len;
问题到这里就解决了后来想到vscode写代码的时候每次提示都只显示一个type别的显示不出来这不就是在告诉我你TM这个结构体里面根本没有这个成员变量恨不得抽自己几个大嘴巴子。