2011-05-29 62 views
1

這裏是我的代碼:C++結構宣言和使用編譯器錯誤

#include <iostream> 
using namespace std; 

struct product { 
    int weight; 
    float price; 
} apple, banana, melon; // can I declare like this ????? 

int main() 
{ 
    apple a; 

} 

當我編譯此示例中,編譯器說:

struct.cpp|11|error: expected ';' before 'a'| 

同樣的事情在C語言中工作正常...

怎麼了?

+1

忽略頭文件和命名空間中的C++語法(不需要用al來重現問題這裏最簡單的代碼),代碼也不會在C中編譯。雖然C和C++是不同的語言,但它們至少是相似的。 – 2011-05-29 14:48:02

回答

6

你做了什麼聲明applebananamelonproduct全局實例,而你main功能表明您想把它們作爲申報類型。爲此,您可以在聲明中使用typedef關鍵字。 (雖然你爲什麼需要這麼多的同義詞struct product?)

這不是從C C和C之間的唯一區別不同++在你的例子是,在C++ product名稱的類型,而用C,你必須指定struct product 。 (除了較爲明顯的事實,你不能在C. #include <iostream>using namespace std;

例如,聲明applebananamelon同義詞struct product

typedef struct product { 
    int weight; 
    float price; 
} apple, banana, melon; 
1

apple不是一個類型,它是您聲明的product結構類型的變量。

typedef product apple; 

將創建一個名爲apple的類型。

+0

這是純粹的C++;在C中,當然你需要'typedef struct product apple;'。由於問題標記爲C++而不是C,所以這是一個純粹的觀察 - 而不是批評。 – 2011-05-29 14:49:21

1

不,它不。在C你會寫

typedef struct product { 
    int weight; 
    float price; 
} apple; 

請注意typedef

1

如何在C中運行相同的代碼?你的代碼也會在C中給出相同的錯誤,這是不正確的。

在你做的主要內容中:apple a其中apple不是任何類型。這是一個全球性的struct product類型變量。

要定義結構類型的變量做:

int main (void) 
{ 
    struct product a; 
} 

或者,如果你希望把一些名字你的結構,你可以使用typedef

typedef struct product { 
    int weight; 
    float price; 
} product; 

然後

int main (void) 
{ 
    product apple, a, whataver; 
}