переменная char не была объявлена

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

Вчера утром весь мой код был в одном файле, и чтобы легче было отслеживать все, я хотел разбить код на несколько файлов.

Это шло хорошо, пока я не добрался до функции, где мне нужно объявить переменную, хотя у меня уже есть (но, возможно, не в том месте).

Поскольку код слишком длинный, я поместил все файлы в pastebin.

Я объявил «поле» в main.cpp:

char field[20][41];

Весь файл здесь: https://pastebin.com/Jy1XvdpL

И я хочу использовать это в моем field.cpp:

void loadLevel(int levelnumber) {

// concatenate leven base with level number
std::string level = "level" + std::to_string(levelnumber) + ".txt";

// print field
// load the text file
std::ifstream file;
file.open(level);
char c;

// read line by line, character by character and store it in field
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 41; j++) {
file.get(c);
field[i][j] = c;
}
}
file.close();

}

Field.h выглядит так:

#ifndef field
#define field

#include <iostream>
#include <string>
#include <fstream>

void loadLevel(int levelnumber);
void drawField();

#endif // !field

Проблема в том, что я не знаю, где определить поле char, потому что я получаю сообщение об ошибке, если сделать это в любом из этих файлов. Итак, что мне нужно сделать, чтобы получить char field workin в field.cpp и, следовательно, работать в моем main?

Постскриптум Это моя первая программа на с ++, и я каждый день учусь чему-то новому. Я ценю любые советы о том, как сделать определенные вещи лучше ^^

С уважением,
Вениамин

0

Решение

Когда вы объявляете переменную в своем основном файле, вы не можете использовать ее в другом файле. (или хотя бы легко)

если вы хотите использовать переменную поля в field.cpp, то вы можете определить ее в field.h.

Код для этого может быть следующим.

#ifndef field

#define field

#include <iostream>
#include <string>
#include <fstream>

void loadLevel(int levelnumber);
void drawField();

char field[20][41];

#endif // !field

Хотя это не позволит вам использовать информацию, которую вы назначаете field[i][j] не будет доступен в вашем основном файле.

Для этого я бы сделал функцию в field.h а также field.cpp который возвращает значение field[i][j],

0

Другие решения

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

void loadLevel (int levelnumber, char field [] [41]);

0