2014-06-09 94 views
-1

的指针我有一个结构定义为创建C++中的结构

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_AREA可以容纳一个指针引用自身,以创造一种链接列表。

在代码中,我有一个方法createNode()它返回BSP_AREA方法签名BSP_AREA createNode()。所以在这个方法中,我只是初始化一个BSP_AREA并返回它。现在调用这个方法之后,为了设置它自己包含的指针,我正在这样做,但是出现错误。

BSP_AREA cobolPassArea2 = createNode(data1); 
cobolPassArea->otherBspArea = &cobolPassArea2; 

我如何初始化指针otherBSP到BSP_PASS_AREAcreateNode()回来了?请不要建议让createNode返回一个指针,而不是具体的BSP_AREA,因为这是要求。

+2

是这个'C'或'C++'?如果它是'C++',则不需要typedef。 – OMGtechy

+0

C++ ............................. –

+1

你会得到什么错误? – Simon

回答

1
cobolPassArea->otherBspArea = &cobolPassArea2; 

应该

cobolPassArea2.otherBspArea = &cobolPassArea2; 

注意,->已经被更改为.,除了加入2的变量名,在左侧。

+1

我已经编辑了关于发生了什么变化的观点。这可能有助于解释那里' - >'和'.'运算符的区别。 –

+0

http://stackoverflow.com/questions/1238613/what-is-the-difference-between-the-dot-operator-and-in-c – macfij

-1
#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; 
} 

//这主要需要强制编译器接受(-fpermissive在G ++)

int main() 
{ 
    BSP_AREA s; 
    s.otherBspArea = &(create()); 
    printf("%d", s.otherBspArea->something); 
} 

//这个应该可以正常工作......但尽管如此,这些要求是一个小奇数

int main() 
{ 
    BSP_AREA s, r; 
    r = create(); 
    s.otherBspArea = &r; 
    printf("%d", s.otherBspArea->something); 
} 

这就是你想要的吗?这编译了一个警告:“以临时地址”

+0

不允许执行'&(create())',if你的编译器生成一个可执行文件,然后它是一个编译器扩展 –

+0

我使用g ++ ...嗯,c类让你做几乎任何你想要的...它给了一个警告tho(g ++ -fmissmissive file.cpp),并没有编译没有-fpermissive – vmp

+0

@vmp:它didn没有宽容的编译,因为_it不允许编译该code_。 –