2014-10-27 78 views
-2

如何訪問另一個文件中的結構元素?有文件可以說1.cpp和2.cpp,我立刻像GCC 1.cpp 2.cpp comiling兩個文件,但我得到如下錯誤如何訪問另一個文件中的結構元素?

1. warning: ‘struct st’ declared inside parameter list [enabled by default] 
2. warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] 
3.dereferencing pointer to incomplete type 

請幫我解決我的代碼下面

1.C

#include<stdio.h> 
struct st 
{ 
     int s; 
     char ch[20]; 
}; 
void fn(struct st *); 
int main() 
{ 
     struct st var={2,"pravu"}; 
     fn(&var); 
} 

2.C

#include<stdio.h> 
    void fn(struct st *p) 
{ 
    printf("%d\n",p->x); 
    printf("%s\n",p->ch); 
} 

我編譯爲GCC 1.C 2.C?

回答

2

您需要將結構的定義放在頭文件中。這樣所有的c/cpp文件將使用相同的定義;像這樣:

2.H

#ifndef 2_H_ 
#define 2_H_ 

struct st 
{ 
     int s; 
     char ch[20]; 
}; 
void fn(struct st *); 

#endif 

1.C

#include "2.h" 
#include<stdio.h> 
int main() 
{ 
     struct st var={2,"pravu"}; 
     fn(&var); 
} 

2.C

#include "2.h" 
void fn(struct st *p) 
{ 
    printf("%d\n",p->x); 
    printf("%s\n",p->ch); 
} 

編輯:請注意,我也動了你的「向前聲明「功能fn(struct st *p)在頭文件中。這是更好的做法......

EDIT2:我考慮到了@JonathanLeffler

+0

的言論謝謝很多先生 – 2014-10-27 17:02:47

+0

需要注意的是(一)標題應該有衛兵來保護它針對多個(b)頭文件不應包含'',因爲頭文件中的所有聲明都不依賴於來自''的聲明(但如果你有'void ffn(FILE * fp,struct st * p);'作爲聲明 - 那麼你需要'#include '。頭文件應該是自包含和冪等的。獨立的意思是如果一個程序需要頭文件聲明的服務, e標題,並且不需要使用它的代碼包含其他標題。 _ [... continue ...] _ – 2014-10-27 17:28:33

+0

_ [... continuation ...] _ Idempotence意味着頭可以多次包含,並且編譯不會中斷。這通常意味着它由頂部的#ifndef HEADER_H_INCLUDED和#define HEADER_H_INCLUDED以及底部的#endif // HEADER_H_INCLUDED保護。爲宏選擇的名稱需要是唯一的 - 例如,有些人使用UUID,但其他情況並不重要。 – 2014-10-27 17:30:42