Я столкнулся с проблемой вчера, когда пытался разбить мой код на несколько файлов.
Вчера утром весь мой код был в одном файле, и чтобы легче было отслеживать все, я хотел разбить код на несколько файлов.
Это шло хорошо, пока я не добрался до функции, где мне нужно объявить переменную, хотя у меня уже есть (но, возможно, не в том месте).
Поскольку код слишком длинный, я поместил все файлы в 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?
Постскриптум Это моя первая программа на с ++, и я каждый день учусь чему-то новому. Я ценю любые советы о том, как сделать определенные вещи лучше ^^
С уважением,
Вениамин
Когда вы объявляете переменную в своем основном файле, вы не можете использовать ее в другом файле. (или хотя бы легко)
если вы хотите использовать переменную поля в 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]
,
Вы можете использовать массив полей в своей функции, передав его в качестве аргумента функции loadlevel, проверьте этот вопрос тоже, если вы хотите использовать указатели.
Итак, ваша функция будет выглядеть так:
void loadLevel (int levelnumber, char field [] [41]);