【发布时间】:2017-09-29 06:34:30
【问题描述】:
我昨天在尝试将代码拆分为多个文件时遇到了问题。
昨天早上我的整个代码都在一个文件中,为了更轻松地跟踪所有内容,我想将代码拆分为更多文件。
这很顺利,直到我得到一个需要声明变量的函数,尽管我已经有了(但可能在错误的地方)。
因为代码太长,我把所有文件都放到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.cpp 中工作并因此在我的 main 中工作?
附:这是我的第一个 C++ 程序,我每天都在学习新东西。我很感激任何关于如何更好地做某些事情的提示^^
亲切的问候, 本杰明
【问题讨论】:
-
首先,你没有在你的头文件中声明
field变量,所以field.cpp源文件不会知道它(除非你有一个单独的声明)。但更大的问题是:你认为#define field做了什么?也许你应该get a couple of good beginners books to read?特别是如果这是您的第一个 C++ 程序,您可能会做很多事情来有效地学习一些东西。开始很多更简单。 -
对于未来的问题,请了解如何创建Minimal, Complete, and Verifiable Example。链接可能会过时,使问题变得毫无价值。
-
@Someprogrammerdude 我会考虑这些书。但是如果我在我的 field.cpp 中声明它,我的 main 不知道它,因为它说它没有被声明。如果我在两个文件中都声明它,就会有重复。
-
@Someprogrammerdude 这是我的第一篇文章,下次我会做得更好!感谢您对此的帮助:)
-
如果你读过一本好书(或教程),它会告诉你声明(告诉编译器某处存在某事)和定义之间的区别i> (说“这东西在这里存在”)。您在某个源文件中定义变量,然后在需要该变量的源文件中包含的头文件中declare(使用
extern关键字)该变量.我还建议您了解translation units 的概念。
标签: c++ variables code-splitting