2012-06-15 81 views
1

所以我morelikely的交叉引用運行的問題用CC結構/功能交叉引用

您好,(我想不出它寫在第一個由於某種原因)

Basicly驗證碼:

structA.h:

#pragma once 

#include "structB.h" 

typedef struct 
{ 
    B b; 
}A; 

structB.h:

#pragma once 

#include "structA.h" 

typedef struct 
{ 
    int field; 
}B; 

void func(A* a); 

structB.c:

#include "structB.h" 

void func(A* a) 
{ 
} 

生產上的VC2010錯誤follwing:

structa.h(7):錯誤C2016:C要求結構或聯合具有

至少一個成員structa.h(7):錯誤C2061:語法錯誤:標識符

'B'等

如此,因爲我只有一個指向在FUNC(A * A)我嘗試做一個向前聲明是這樣的:在structB.c

#pragma once 

typedef struct A; 

typedef struct 
{ 
    int field; 
}B; 

void func(A* a); 

,我添加# 「structA.h」

但是這並不工作,解決它我不得不改變FUNC的參數(A * a)至FUNC(結構A * a)以原型和執行...

但在這種情況下,我失去打字我的結構的目的...

我知道我可以簡單地將函數移動到另一個文件,但函數與我的結構有關,所以我想將原型保存在與我的結構相同的文件中。 現在也許這不是一個很好的方式來做事情在C中,我主要習慣於C++,所以我傾向於認爲在C++時,做C通常是有問題的...

有人知道一種解決方法嗎?非常感謝你。

+0

什麼問題? 'func'需要一個指向'A'的指針。它可以在'structA.h'中。爲什麼你想強制它成爲'structB.h'?看起來''structA.h'中的內容會更有意義。也許如果你把實際的名字,而不是像'structA'和'structB'這樣的化妝名稱,那麼你想要做什麼更明顯? – user1118321

+0

基本上在我的情況下,B代表玩家,func代表updatePlayer(),它需要一個遊戲(A)指針,這個指針有很多用於更新玩家的有用信息,而遊戲結構中包含一個玩家。 – Samir

回答

2
typedef struct structA; 

這是如何編譯的? - 正確:

typedef struct A A; 
+0

我的不好,這是一個複製/粘貼問題,假設是typedef struct A;但是,您的更正也不適用:重新定義;不同的基本類型 請參閱'A'的聲明 – Samir

+0

您確定沒有試圖用C++編譯器編譯C代碼嗎? – 2012-06-15 05:07:50

+0

我怎麼知道?我使用VS2010我相信它編譯好... – Samir