none
無法在另一個Form中使用Struct結構 RRS feed

  • 問題

  • CLR;VC2008@WinXP 

     

    我在Form1中宣告一個結構

    struct Imdata

    {

    int count;

    struct Imdata* link;

    };

     

    但是在Form2中宣告

    Imdata *ImStart;

    出現錯誤

    error C2143: 語法錯誤 : 遺漏 ';' (在 '*' 之前)

    error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int

     

    我確定不是我漏了;

    針對這個問題,完全沒有想法,不知何解

     

    • 已編輯 namohsieh 2011年1月7日 上午 08:24
    2011年1月7日 上午 08:02

解答

  • 您可以在Form1所屬的Namespace中宣告

    struct Imdata

    {

    int count;

    struct Imdata* link;

    };

    不要在Form1或Form2中宣告, 則Form1和Form2都可以使用Imdata, 不需要再宣告

    2011年1月9日 上午 02:45

所有回覆

  • 若我直接在Form2重複宣告

     

    struct Imdata

    {

    int count;

    struct Imdata* link;

    };

     

    他會說我重複宣告此結構

     

    然後我在Form2宣告了一個新的結構,內容不變 只改變結構名子

     

    struct abc

    {

    int count;

    struct Imdata* link;

    };

     

    結果Imdata *ImStart; 就過了

    我並沒有修改成abc *ImStart; 就只是加入了上面這段結構名子不同的宣告

    就過了,我完全不了解這是怎麼回事

     

    • 已編輯 namohsieh 2011年1月7日 上午 08:53
    2011年1月7日 上午 08:15
  • 然後我把

    struct abc

    {

    int count;

    struct Imdata* link;

    };

    刪掉 int count; 結構可以正常使用無誤

    刪掉 struct Imdata* link; 就會出錯

    LINK : fatal error LNK1255: 因為中繼資料錯誤,導致連結失敗

     

    現在Form2使用

     

    struct abc

    {

    struct Imdata* link;

    };

     

     

    底下使用時宣告

    Imdata* ImStart;可以使用

    刪掉上面的結構宣告就不行,但是這不在我的理解之中

     

    請求前輩指點

     

     

    2011年1月7日 上午 08:44
  • 您可以在Form1所屬的Namespace中宣告

    struct Imdata

    {

    int count;

    struct Imdata* link;

    };

    不要在Form1或Form2中宣告, 則Form1和Form2都可以使用Imdata, 不需要再宣告

    2011年1月9日 上午 02:45
  • 前輩你好

    感謝你的回答

    我現在的做法是把這個結構寫在一個.h檔中

    需要用到時都去include他就可以了

     

    我想我沒搞清楚的是

    Form跟Form之間是獨立的個體,在互相認得的結構或include的檔案並沒有互相沿用

    (不知道是不是有誤)

     

    2011年1月10日 上午 06:11
  • 不知道前輩有沒有建議一些關於視窗介面的書,主要是針對視窗的觀念

    以往寫程式就只是指標來指標去,也沒什麼新鮮的

    寫起視窗程式,反而有一些簡單的細節跟觀念完全不知道,得半摸半猜

    甚至是一些像是在視窗產生前中斷抓訊息等,這類的看過別人發問,但是我卻對這些視窗的前後了解不多

     

    不知道是否有適合的學習資料,謝謝

    2011年1月10日 上午 06:18
  • 我發覺我這麼做是不行的

    當我的Form1

    #include "DataStruct.h" //裡面放我要的結構

    #include "Form2" //為了把他叫出來

    Form2再去#include "DataStruct.h"

    一樣會出現重複定義

    但是如果他認得,卻又不能直接使用我想要用的結構

    2011年1月10日 上午 07:29
  • 應該說:宣告在Form1中的東西必須透過Form1才能使用, 所以如果struct Imdata宣告在Form1中, 其使用方式如下:

    Form1::Imdata

    2011年1月12日 上午 01:35
  • 參考書籍其實沒有好與壞, 只有適合不適合, 因為每個人的背景知識不同, 所能接收的內容也不盡相同, 建議自己到書店翻閱一下比較好

    2011年1月12日 上午 01:37
  • 防止重覆定義要用#ifndef
    2011年1月12日 上午 01:39