2011-05-29 45 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; 
}