2015-05-07 159 views
4

搜索一段時間後。我編寫了一個簡單的程序,試圖解決我的更大的問題,更容易,很少或沒有成功。這是在主要工作正常代碼:Typedef結構未知類型名稱

typedef struct nimaginario{ 
    int parte_real; 
    int parte_imaginaria; 
}nimaginario; 

int suma(nimaginario *n){ 
    return n->parte_real + n->parte_imaginaria; 
}; 

#include <stdlib.h> 

int main(){ 

    nimaginario *num = malloc(sizeof(nimaginario)); 
    num->parte_real = 1; 
    num->parte_imaginaria = 2; 
    int a = suma(num); 
} 

然後我嘗試把它分成應該在組織的不同部分至於說:prueba.c,prueba.h和main.c中

prueba.h:

#define PRUEBA_H 
#ifndef PRUEBA_H 

typedef struct nimaginario{ 
    int parte_real; 
    int parte_imaginaria; 
}nimaginario; 

int suma(nimaginario *n); 

#endif 

prueba.c:

#include "prueba.h" 

int suma(nimaginario *n){ 
    return n->parte_real + n->parte_imaginaria; 
}; 

的main.c:

#include <stdlib.h> 
#include "prueba.h" 

int main(){ 

    nimaginario *num = malloc(sizeof(nimaginario)); 
    num->parte_real = 1; 
    num->parte_imaginaria = 2; 
    int a = suma(num); 
} 

在命令「GCC的main.c」 在我一樣第二名編制的第一個地方,我如下:「GCC prueba.c的main.c」

和第二個時間,這具體嘗試(出了一百)我得到這個錯誤:

prueba.c:3:10: error: unknown type name `nimaginario' 
main.c: In function `main': 
main.c:18:2: error: unknown type name `nimaginario' 
main.c:18:35: error: `nimaginario' undeclared (first use in this function) 
main.c:18:35: note: each undeclared identifier is reported only once for each function it appears in 
main.c:19:5: error: request for member `parte_real' in something not a structure or union 
main.c:20:5: error: request for member `parte_imaginaria' in something not a structure or union 

我想我已經試過一切和任何東西。並看到我可以看到的所有錯誤。我也搜索了很多,並在Stackoverflow中搜索,但沒有成功。

事情我已經嘗試:

  • 更改的typedef結構...並做一步一步來。
    • 先做typedef,然後做struct,反之亦然。
  • 更改struct和typedef中標籤的名稱。
  • 檢查#define /#ifndef
  • 改變指針全部(最初我想要的結構是整數指針)忘記typedef和工作只與結構。因此總是聲明爲struct nimaginario。
  • 檢查我的文件在哪裏。

我只是沒有錘子關閉。我覺得很麻木的,剛剛無C一年...

+3

'#define PRUEBA_H #ifndef PRUEBA_H'應該是'#ifndef PRUEBA_H #define PRUEBA_H' – BLUEPIXY

回答

7

你必須與include guards ;-)

你想一個問題檢查第一則定義它,而不是其他方式周圍。

#define PRUEBA_H 
#ifndef PRUEBA_H 
... 

應該

#ifndef PRUEBA_H 
#define PRUEBA_H 
.... 
4

一個非常微妙的,這些前兩行是錯誤的順序:

#define PRUEBA_H 
#ifndef PRUEBA_H 
// declare everything 
#endif 

這是什麼東西做的是定義符號那麼,因爲它定義的,之間的一切不包括和#endif

它需要:

#ifndef PRUEBA_H 
#define PRUEBA_H 

代替。


所以很明顯的事情你的第三點你檢查:

  • 檢查的#define /的#ifndef

可以用一點點檢查有可能做:-)

+1

Dislexia可能非常耗時......謝謝各位! – MikeMajara