2013-11-29 106 views
2

時,我有以下typedef結構錯誤使用typedef結構

typedef unsigned int NOTE_FREQ; 
/*******A_MUSIC_ELEMENT structure****************/ 
typedef struct { 
    NOTE_FREQ frequencyValue; 
    int duration; 
} A_MUSIC_ELEMENT; 

現在我要讓A_MUSIC_ELEMENT和具有特定值的數組。

A_MUSIC_ELEMENT ZTitleScreen[] = {{60, 20},{80, 50}}; 

它編譯得很好。但爲了讓事情更易讀我嘗試設置

int BPM1 = 60; 
int BPM2 = 80; 
int TIME1 = 20; 
int TIME2 = 50; 
A_MUSIC_ELEMENT ZTitleScreen[] = {{BPM1, TIME1},{BPM2, TIME2}}; 

,我得到一個錯誤說:

constant expression required 

我不知道爲什麼,因爲它應該是同樣的事情。我正在使用Windows 8,mplab x IDE,嗨技術c編譯器。任何幫助揭祕這個謝謝。

回答

4

BPM1的值可能會更改,因此編譯器將不允許它作爲初始化程序列表的參數。

如果要使用命名常量,請嘗試使用enum

+0

在C++ 11你有一個叫做'const_exp'功能,但在C語言中,你可能會被困在做'HALF_NOTE'的宏中。 – woolstar

+0

確實修復了出現的錯誤,謝謝 – user1945925

1

6.7.9初始化

 4. All the expressions in an initializer for an object that has static or 
thread storage duration shall be constant expressions or string literals. 

下面是不同的方式,你可以初始化結構...

struct date date1= { 9, 5, 1982};   // Initializing structure 
struct date date2 = { .day = 9, .month = 5};// Designated initializer 
struct date date3 = {0};     // Initializing all members to 0 
struct date date4; 
struct date date5 = date1;     // Initialization using variable 

date4.day = 9;  // Member wise initialization 
date4.month = 5; // Member wise initialization 
date4.year = 1982; // Member wise initialization 
+0

。這是從哪裏來的?我只從這個理解主要想法。所有這些靜態和線程存儲的東西,我將不得不研究以瞭解它 – user1945925

+0

以上聲明來自C標準(ISO/IEC 9899:201x)。下面的代碼我輸入它。 – 2013-11-29 05:19:13