次のコードは、Keilの下でARMCCを使用してCでコンパイルしますが、C++でコンパイルできません。元のコードにはいくつかのconstキーワードがありましたが、それは別の重要ではない問題を引き起こしているようですので、今は削除しました。円の依存構造体、前方宣言を使用する場合の構造体のエラー再定義
struct MENU
{
struct MENU * NextMenu;
struct MENU * PrevMenu;
void (* InitFunction)(void);
};
typedef struct MENU MENU_T;
MENU_T MENU_A; // <- this forward declaration is needed for circular reference between structs
MENU_T MENU_B;
MENU_T MENU_C;
MENU_T
MENU_A = // <- However redefinition error occurs here
{
.NextMenu = &MENU_B,
.PrevMenu = &MENU_C,
.InitFunction = 0,
};
MENU_T
MENU_B =
{
.NextMenu = &MENU_C,
.PrevMenu = &MENU_A,
.InitFunction = 0,
};
MENU_T
MENU_C =
{
.NextMenu = &MENU_A,
.PrevMenu = &MENU_B,
.InitFunction = 0,
};
は、私の知る限り、最初の行は、宣言していない定義、それほど発生しません「というエラー再定義」... MENU_T MENU_A;
で
CおよびC++は、2つの異なる言語ですが、たとえば、あなたは 'C++でのtypedef struct'は必要ありません。 –
マクロ名と列挙定数以外のものには、すべて大文字を使用しないでください。それは混乱して読みにくいです。 –