2015-07-10 77 views
-2

我有一個class A由文件A.hppA.cpp實現。
class A的方法之一接收到一條消息,將其轉換並存儲到一個結構中。
方法簽名看起來像這樣和方法是公開的:類別使用的結構的類型

eRetCode A::ParseInfo(sometype* pMessage, tParsedInfoFromA& ParsedInfo); 

在我看來tParsedInfoFromA類型應該(用typedef)在,因爲它是相關類和無意義沒有被定義A.hpp類。
最簡單的方法是在類的上方定義它。
但是,我覺得文件A.hpp應該從A類的聲明開始。
所以我想要在類聲明後出現該結構的typedef

確實C++我提供合法的方式(未一些「醜陋」特技),以指示tParsedDataFromA下面,所以我可以在ParseInfo方法的聲明中使用參考tParsedInfoFromA類型的結構所限定?
我試過向前聲明,但編譯器不會有它。

將不勝感激您的意見

+0

你是什麼意思_The編譯意味着不會有it_? – BlackDwarf

+0

就像'一張圖片勝過千言萬語'一樣,一個小的代碼示例對你的問題會很好; –

+0

'tParsedInfoFromA'聲明在哪裏? – NathanOliver

回答

0

假設你A類有tParsedInfoFromA型(僅tParsedInfoFromA&tParsedInfoFromA*)的任何成員,方法返回或參數,您提供的cpp文件類A的實現,可以實現你想要什麼。

在你的頭,向前聲明您結構爲:

struct tParsedInfoFromA; 

然後,定義A級:

class A 
{ 
    eRetCode A::ParseInfo(sometype* pMessage, tParsedInfoFromA& ParsedInfo); 
    // ... 
}; 

然後,定義你的結構:

struct tParsedInfoFromA { 
    // ... 
}; 

的幾點思考,雖然。 如果tParsedInfoFromA(不是最好的名字,但我認爲實際名稱更好)只包含少數成員,那麼在A之前定義它是有意義的。如果它更長,最好將它放在單獨的文件中。 最後,如果你覺得你的結構定義是undissociable類的,你可以聲明結構嵌套在A.

class A 
{ 
    struct tParsedInfoFromA 
    { 
     // struct members 
    } 
    eRetCode A::ParseInfo(sometype* pMessage, tParsedInfoFromA& ParsedInfo); 
    // class members 
}; 
+0

@dureuillHi,dureuill非常感謝您的回答。以前我在做同樣的事情,你有一個區別 - 我用typedef。用typedef它會給出錯誤。沒有typedef它可以正常工作。作爲評論的結果,我做了一個搜索,並附帶了這個[鏈接](http://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c)。根據這個typedef是沒有必要的(除了隱藏問題),但我仍然很好奇爲什麼用typedef我有錯誤。 – Victoriia

+0

@dureuill錯誤是:'結構tParsedInfoFromA''的前向聲明,''const struct tParsedInfoFromA''的聲明,'結構tParsedInfoFromA有一個前面的聲明結構tParsedInfoFromA' – Victoriia

+0

@dureuill關於這個想法:我有多個類,類似於A ,每個都有自己的知識,都從同一個父親繼承,都有ParseInfo方法。有些結構雖短但有些長。我不喜歡在課前申報的想法。把它放在分隔文件中的想法會產生多個文件,每個文件只包含結構。用戶還需要包括hpp類和其他h文件。在課堂上宣佈結構的想法很有趣。我需要詳細瞭解它,以瞭解它是否適​​用於我。再次感謝! – Victoriia