Ошибка cpp при попытке объявить массив в другом файле

Я хотел сделать мой код более понятным - вот почему я создал дополнительный файл cpp, в котором объявил массив, занимающий много места.

Но всякий раз, когда я пытаюсь скомпилировать мой код, он говорит

ошибка c2466: присвоение массива постоянного размера не может быть

(Я перевел с немецкого, так что не удивляйтесь, если вы не знаете эту ошибку 1by1)

Код в main.cpp (Включить файл)

#include "mapOne.cpp"

И код в mapOne.cpp:

int point[100][100][2];
point [1][0][0] = 1; [...]

Кто-нибудь может мне помочь? Я ненавижу, если файл имеет длину>400 строк только потому, что объявлен один массив...

2 ответа

Решение

Ваша проблема возникает из-за того, что вы не объявили массив в той области, откуда ваша функция сможет использовать его. Например, если я сделаю следующий код:

В file1.cpp

int array[20];

В файле2.cpp

#include "file1.cpp"

int function1()
{
  i = 1;
  for (int x = 0; x<20; x++)
  {
    array[x] = i;
    i = i + 2;
  }
}

Массив [x] не будет распознан. Причина, по которой он не распознается, заключается в том, что даже если вы используете код "include" сверху, вы включаете только возможность использовать функции, присутствующие в файле file1.cpp. Причина, по которой вам разрешено использовать только функции, а не переменные, заключается в том, что компиляторы не хотят смешивать переменные, которые вы объявляете в file1.cpp и file2.cpp. Это имеет смысл, потому что часто вы объявляете переменные с одинаковыми именами в разных файлах, потому что это проще.

Однако вы можете объявить массив в заголовочном файле. Если вы пишете свою функцию в file2.cpp, вы создаете заголовочный файл с именем file2.h:

В файле2.h:

class file2
{
    public:
    int array[20];///or whichever type of array you want to declare

}

Важно хранить переменные в разделе "public:", чтобы все функции, которые вы выполняете в file2.cpp, могли использовать его.

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

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

Другие вопросы по тегам