我正在用C編寫。Const自引用結構
我已經定義了一個由自引用結構構成的新類型(noFunc_menuEntry)。
struct noFunc_menuEntry_tag {
const char *text;
struct noFunc_menuEntry_tag *up_entry;
struct noFunc_menuEntry_tag *down_entry;
struct noFunc_menuEntry_tag *back_entry;
struct noFunc_menuEntry_tag *enter_entry;
};
typedef struct noFunc_menuEntry_tag noFunc_menuEntry;
我需要定義一系列的變量是這樣的:
menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5};
menuEntry_2 = {title_2, &menuEntry_3, &menuEntry_1, &menuEntry_1, &menuEntry_6};
等。
所以我需要分開變量的聲明和defing,因爲每個變量都依賴於其他變量。在頭文件中我寫的聲明
noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
等等,而在功能.c文件我已經初始化變量:
void menu_init(void)
{
menuEntry_1.text = title;
menuEntry_1.up_entry = &menuEntry_2
}
等爲其他成員和變量。
但是我希望我的變量是const
:
const noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
所以我的問題是關於separing聲明,我定義的類型const
變量的定義。我能怎麼做?難道我做錯了什麼?
當然,如果我在聲明中簡單添加const
,編譯器會在我初始化變量時報告錯誤(我試圖編寫只讀變量)。
定義它繼續如果你已經初始化與'menuEntry_1 =變量{TITLE_1,與menuEntry_2,與menuEntry_4,與menuEntry_1,與menuEntry_5};',你爲什麼會再次'menu_init'初始化它們? – user694733
因爲你的結構體包含這些(全局)變量的*指針*,我相信你應該能夠簡單地定義它們並在一行中初始化,即不需要有初始化函數。確實,*「每個變量都依賴於其他變量」*,但如果您要更改'menuEntry_1'內容,這並不意味着'&menuEntry_1'會改變。 – Groo
@ user694733:我在'menu_init'中初始化變量,如果我不使用它們作爲'const',但是如果它們必須是'const',我自然不會使用'menu_init'。我正在尋找正確的方式來做到這一點! – BzFr