所以我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通常是有問題的...
有人知道一種解決方法嗎?非常感謝你。
什麼問題? 'func'需要一個指向'A'的指針。它可以在'structA.h'中。爲什麼你想強制它成爲'structB.h'?看起來''structA.h'中的內容會更有意義。也許如果你把實際的名字,而不是像'structA'和'structB'這樣的化妝名稱,那麼你想要做什麼更明顯? – user1118321
基本上在我的情況下,B代表玩家,func代表updatePlayer(),它需要一個遊戲(A)指針,這個指針有很多用於更新玩家的有用信息,而遊戲結構中包含一個玩家。 – Samir