C ++结构声明和用法编译器错误

时间:2011-05-29 14:40:09

标签: c++ struct

这是我的代码:

#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语言中工作正常......

怎么了?

4 个答案:

答案 0 :(得分: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 :(得分: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;
}
相关问题