2014-06-09 101 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_。 –