2010-11-09 66 views
4

這是我的.h文件:宣佈在.h文件中一個結構和.c文件執行

struct _MyString; 
typedef struct _MyString MyString; 

我想在.c文件及其成員申報。

我想:

typedef struct MyString{ 
    char * _str;// pointer to the matrix 
    unsigned long _strLength; 
    }MyString; 

,但它不工作。 我該如何在.c文件中聲明結構的記憶?

謝謝

+2

什麼不起作用?給出具體的錯誤消息/症狀。 – 2010-11-09 18:00:58

+0

我現在不能測試這個,但我猜想這是因爲你將_MyString類型化爲MyString,但是接着定義了一個名爲MyString的結構體。您可能想要在.c文件中沒有typedef的情況下定義_MyString。 – asm 2010-11-09 18:03:32

回答

9

您只需要1個typedef。保留.h文件中已有的文件並刪除所有其他文件。

現在,結構名稱是struct _MyString。這就是你應該在.c文件中定義的內容,而不是struct MyString:注意不存在'_'。

所以

.h文件中

struct _MyString; 
typedef struct _MyString MyString; 

.c文件

#include "file.h" 
struct _MyString { 
    char * _str;// pointer to the matrix 
    unsigned long _strLength; 
}; 
2

什麼是不工作?如果您嘗試從另一個.c文件訪問此結構,則這不起作用。整個結構聲明對於所有使用它的源文件都必須是可見的 - 通常這是通過在頭文件中聲明它,並在源文件中聲明它來完成的。

也許你正在使用的功能是如何在頭文件聲明,在源文件中定義混淆這 - 聲明還必須是所有源文件可見。

0

如果您需要在.c文件使用一個struct那麼它需要的結構的完整定義在編譯時。這通常是通過#include帶定義的頭文件來完成的。

如果您不需要共享結構定義,則可以將它放在.c文件中,但它只對該文件中的函數可見。

看起來您正試圖爲您的結構創建一個接口,並且只在.c文件中定義它以阻止代碼的其他部分訪問結構。你可以做到這一點,但只能通過指針。例如:

typedef struct MyString* MyString; 

而在.c文件中,您可以定義它。您可以使用MyString typedef來定義函數。

0

請清楚哪些工作無法得到正確的解決方案。 我的猜測是什麼可能是問題在於您需要將.h文件包含在您定義結構的.c文件中。 在每個需要此結構的.c文件中也包含.h。確保你在這種情況下extern這個結構。