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);
}