2016-05-30 94 views
-1

我試圖獲取在不同的源文件(other.c)中定義的結構的大小以使其隱藏。獲取隱藏結構的大小C

在other.h:

typedef struct X x_t; 

在other.c:

struct X{ 
int y; 
int z; 
}; 

現在我想在main.c中得到這個結構的大小。

#include "other.h" 

int main(){ 
    x_t *my_x; 
    my_x = malloc(sizeof(struct x_t)); 
    return 0;} 

但是這給了我以下錯誤:

error: invalid application of ‘sizeof’ to incomplete type ‘struct x_t’ 

任何人可以幫助我嗎?謝謝!

+6

你不能這樣做。如果你想'main.c'能夠在'struct X'的實例(而不是指針)上運行,你需要在頭文件中定義。 –

+0

'sizeof'在編譯時進行評估。如果'struct'不可見,則無法調整大小。 –

+7

沒有'struct x_t',只有'x_t'或'struct X'這樣的事情 – user3078414

回答

3

隱藏struct的全部目的是仔細控制它們的構造,破壞和訪問內容。

構建,破壞,獲取內容和設置內容的功能必須提供以使隱藏的struct有用。

這裏是什麼樣的h和.c文件可能是一個例子:

other.h:

typedef struct X x_t; 

x_t* construct_x(void); 

void destruct_x(x_t* x); 

void set_y(x_t* x, int y); 

int get_y(x_t* x); 

void set_z(x_t* x, int z); 

int get_z(x_t* x); 

other.c:

struct X { 
    int y; 
    int z; 
}; 


x_t* construct_x(void) 
{ 
    return malloc(sizeof(x_t)); 
} 

void destruct_x(x_t* x) 
{ 
    free(x); 
} 

void set_y(x_t* x, int y) 
{ 
    x->y = y; 
} 

int get_y(x_t* x) 
{ 
    return x->y; 
} 

void set_z(x_t* x, int z) 
{ 
    x->z = z; 
} 


int get_z(x_t* x) 
{ 
    rteurn x->z; 
} 
+1

解決方案確實是一組獲取者和制定者! –