Объявление структуры C ++ и ошибка компиляции - PullRequest
1 голос
/ 29 мая 2011

Вот мой код:

#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'|

То же самое прекрасно работает на языке Си ...

Что не так?

Ответы [ 4 ]

6 голосов
/ 29 мая 2011

То, что вы сделали, объявлено apple, banana и melon как глобальные экземпляры product, тогда как ваша функция main указывает, что вы хотели объявить их как типы.Для этого вы должны использовать ключевое слово typedef в объявлении.(Хотя зачем вам так много синонимов для struct product?)

Это не отличается от C. Единственное отличие между C и C ++ в вашем примере состоит в том, что в C ++ product называет тип, тогда как вC вам нужно указать struct product.(Помимо более очевидного факта, что вы не можете иметь #include <iostream> или using namespace std; в Си.)

Например, объявляет apple, banana и melon как синонимы для struct product:

typedef struct product {
  int weight;
  float price;
} apple, banana, melon;
1 голос
/ 29 мая 2011

Как один и тот же код может выполняться в 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;
}
1 голос
/ 29 мая 2011

Нет, это не так.В C вы должны написать

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

Обратите внимание на typedef.

1 голос
/ 29 мая 2011

apple не тип, это переменная типа структуры product, которую вы объявили.

typedef product apple;

создаст тип с именем apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...