这是我的代码:
#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语言中工作正常......
怎么了?
答案 0 :(得分:6)
您已完成的工作被宣布为apple
,banana
和melon
为product
的全局实例,而您的main
函数表示您要申报他们作为类型。为此,您将在声明中使用typedef
关键字。 (虽然为什么struct product
需要这么多同义词?)
这与C没有区别。在您的示例中,C和C ++之间的唯一区别在于,在C ++中product
命名一个类型,而在C中,您必须指定struct product
。 (除了更明显的事实,你不能在C中拥有#include <iostream>
或using namespace std;
。)
例如,将apple
,banana
和melon
声明为struct product
的同义词:
typedef struct product {
int weight;
float price;
} apple, banana, melon;
答案 1 :(得分:1)
apple
不是类型,它是您声明的product
结构类型的变量。
typedef product apple;
会创建一个名为apple
的类型。
答案 2 :(得分:1)
不,不。在C中你会写
typedef struct product {
int weight;
float price;
} apple;
请注意typedef
。
答案 3 :(得分: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;
}