Почему компилятор Visual Studio говорит, что в моей функции C ++ отсутствует точка с запятой? - PullRequest
2 голосов
/ 13 декабря 2011

Вот моя функция.Переменные ширины и высоты являются глобальными целочисленными переменными, определенными над этой функцией со значениями в сотнях.

#define ORIGINAL_WIDTH 800;
#define ORIGINAL_HEIGHT 700;

void set_perspective(void) {
  int view_width, view_height;
  if (width < height) {
    view_width = width;
    view_height = (float) width * ORIGINAL_HEIGHT / ORIGINAL_WIDTH;
  }
  else {
    view_width = (float) height * ORIGINAL_WIDTH / ORIGINAL_HEIGHT;
    view_height = height;
  }
}

Замечания моего компилятора C ++ «ошибка C2143: синтаксическая ошибка: отсутствует ';'перед '/' "в строках:

view_height = (float) width * ORIGINAL_HEIGHT / ORIGINAL_WIDTH;
and 
view_width = (float) height * ORIGINAL_WIDTH / ORIGINAL_HEIGHT;

Это имеет отношение к приведению?Почему где-то пропущена точка с запятой?Спасибо за ваше время.

Ответы [ 2 ]

13 голосов
/ 13 декабря 2011

Это потому, что в вашем #define есть точки с запятой. Вот как это должно выглядеть:

#define ORIGINAL_WIDTH 800
#define ORIGINAL_HEIGHT 700

#define выполняет буквенную подстановку текста, поэтому ваша строка выглядит компилятором так:

view_height = (float) ширина * 800; / 700 ;;

8 голосов
/ 13 декабря 2011

Откажитесь от макросов (которые являются подстановками текста) и используйте константы, и эта проблема не может возникнуть.

static const int ORIGINAL_HEIGHT = 800;
static const int ORIGINAL_WIDTH = 700;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...