Программа ожидает скобку, а она там уже есть

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <iomanip>

using namespace std;

#define ARRAYSIZE  15;


int main(void)
{
    //things needed
    ifstream infile;
    ofstream outfile;

    double xArray[ARRAYSIZE];


}

Как видите, мой код должен быть в порядке, но моя программа продолжает говорить мне, что ожидает '[', где находится xArray[ARRAYSIZE]. Кстати, я использую Microsoft Visual Studio 2013.


person Merc.Go    schedule 05.12.2013    source источник
comment
\#define не должен иметь ;   -  person Jules G.M.    schedule 05.12.2013
comment
Просмотрите код после предварительной обработки.   -  person chris    schedule 05.12.2013
comment
Не используй макросы, друг мой.   -  person 0x499602D2    schedule 05.12.2013


Ответы (3)


#define ARRAYSIZE 15

Выньте ; из #define.

С вашим #define, написанным как есть,

double xArray[ARRAYSIZE];

переводится как

double xArray[15;];

Компилятор ожидает ] перед первым ;.


Делая это:

const int ARRAYSIZE 15;

может лучше...

person nhgrif    schedule 05.12.2013
comment
+1 за предложение использовать const int вместо определения. Гораздо лучше практика C++. - person Nathan Ernst; 05.12.2013
comment
Да. В основном я работаю с Objective-C, и поэтому я иногда использую #define, но независимо от языка, когда я делаю что-то простое вроде этого, я использую const int (или enum в некоторых случаях, в зависимости от ситуации). - person nhgrif; 05.12.2013
comment
nhgrif, #defines должно быть последним средством в C++ из-за того, как они применяются (я согласен, что иногда они полезны и/или полезны). C/C++ несколько уникальны из-за происходящих фаз трансляции/компиляции. Скажем, #define pi 3.14 для константы может показаться безобидным, но позже в несвязанном месте кто-то другой может объявить double pi = 3.14159. Но, если препроцессорная версия встречается первой, второй, невинный экземпляр будет преобразован в double 3.14 = 3.14159, что, очевидно, будет ошибкой. - person Nathan Ernst; 06.12.2013
comment
О, я согласен. В своем комментарии я имел в виду, что, поскольку я чаще всего кодирую на Objective-C, я иногда использую #define... но такие случаи почти всегда возникают при написании кода на Objective-C. Я почти никогда не #define в C++. - person nhgrif; 06.12.2013

после предварительной обработки ваш код выглядит как

int main(void)
{
    //things needed
    ifstream infile;
    ofstream outfile;

    double xArray[15;];  // replace ARRAYSIZE with 15;
}

поэтому вам нужно удалить ; в #define

#define ARRAYSIZE  15
person Bryan Chen    schedule 05.12.2013

#define ARRAYSIZE 15;

Define заменит ARRAYSIZE тем, что находится рядом с ним.

Так что в этом случае он заменит ARRAYSIZE на 15;

Так что все, что вам нужно сделать, это просто удалить точку с запятой в операторе определения

person nimish    schedule 05.12.2013