C++ 在C+中创建结构的指针+;
我有一个结构定义为C++ 在C+中创建结构的指针+;,c++,pointers,struct,C++,Pointers,Struct,我有一个结构定义为 typedef struct BSP_AREA { struct BSP_AREA *otherBspArea; /* Pointer to itself */ long BSPReturnCode; short sGroupNum; /* default to 0 */ char filler4[
typedef struct BSP_AREA {
struct BSP_AREA *otherBspArea; /* Pointer to itself */
long BSPReturnCode;
short sGroupNum; /* default to 0 */
char filler4[6]; /* alignment bytes */
unsigned char byCobolWorkArea[20]; /* Cobol Work Area */
// .... and lots of others fields
} * PBSP_PASS ;
因此基本上,BSP_区域
可以保存指向自身的指针引用,以创建一种链接列表
在代码中,我有一个方法createNode()
,它返回一个BSP\u区域
,方法签名为BSP\u区域createNode()
。所以在这个方法中,我只是初始化一个BSP\u区域
,然后返回它。现在调用此方法后,要将其包含的指针设置为自身,我正在执行此操作,但得到一个错误
BSP_AREA cobolPassArea2 = createNode(data1);
cobolPassArea->otherBspArea = &cobolPassArea2;
如何初始化指向从createNode()
返回的BSP\u PASS\u区域的指针otherBSP?请不要建议让createNode返回指针,而不是具体的BSP_区域
,因为这是必需的
cobolPassArea->otherBspArea = &cobolPassArea2;
应该是
cobolPassArea2.otherBspArea = &cobolPassArea2;
请注意,除了在左侧的变量名中添加2
之外,->
已更改为
#include <cstdio>
#include <cstdlib>
typedef struct BSP_AREA
{
struct BSP_AREA *otherBspArea;
int something;
} *PBSP_PASS ;
struct BSP_AREA create()
{
BSP_AREA x;
x.something = 5;
return x;
}
//这个应该很好用。。。但是,这些要求还是有点奇怪
int main()
{
BSP_AREA s, r;
r = create();
s.otherBspArea = &r;
printf("%d", s.otherBspArea->something);
}
这就是你想要的吗?这是一个警告:“获取临时地址”这是C
还是C++
?如果是<代码> C++ >代码>,就不需要TyEuff.C++。……你会得到什么错误?很难给出答案。但是,在创建链表时,使用指向堆中未分配的对象的指针听起来有问题。你可以很快以一个悬空的指针结束。使用“.”而不是“->”,我已经编辑了关于更改内容的要点。这可能有助于解释->
和
运算符之间的区别。不允许执行&(create())
,如果编译器生成可执行文件,那么它就是编译器扩展。我使用g++。。。嗯,c可以让你做任何你想做的事。。。它给出了一个警告tho(g++-fppermissive file.cpp),并且在没有-fpermissive@vmp:未经许可,它无法编译,因为不允许编译该代码。是的,我知道。。。这就是为什么我贴了2条主线。。。这些要求有点奇怪。。。两种方式我都不会
int main()
{
BSP_AREA s, r;
r = create();
s.otherBspArea = &r;
printf("%d", s.otherBspArea->something);
}