如何将多个C ++源代码文件合并到一个项目中?
我正在尝试制作一个Mad Libs TM 计划。我想将我的代码拆分为多个源代码文件,只在我想播放某个Mad Lib时运行一个。
答案 0 :(得分:3)
我可能会建议您完全重新设计您的模型。由于您不熟悉编程,我会尽量保持简单,同时仍然可以从这样的项目中找到重要的想法。
每个Mad Lib TM 都是一个单独的C ++文件。这些文件链接在一起,一个驱动程序根据某些用户或随机输入决定执行哪一个。
问题:
很多代码重复。
例如,每个单独的文件都需要有代码来处理用户输入,构建Mad Lib以及显示Mad Lib。这可以通过将您的公共代码抽象到另一个库并将其链接起来来解决,但有一种更好的方法。此外,如果您需要做一些简单的事情,例如修复Mad Lib中的拼写错误,您必须重新编译整个程序!
很多分散的依赖。
如果您需要更改处理方式,比如用户输入,则必须更改所有您的Mad Lib程序。如果你需要添加一个新的Mad Lib,你必须编写一个全新的程序/函数。而且,如果其他人想要提供MadLib,他们必须遵循特定的指导原则(除非您编写它们)。
调试是一场噩梦。
如果当您需要调试时,您必须筛选许多不同的源文件以解决问题。这也可能发生在所有文件中。
所以,让我们在小规模项目的范围内修复这个模型。
有一个非常简单的解决方案可以修复上面列出的所有问题:
从程序逻辑中提取您的Mad Lib数据。
在此模型中,您有一个用C ++编写的驱动程序。此MadLibs驱动程序将从外部源加载MadLib - 很可能是文本文件。现在,所有程序逻辑都在一个位置,并与实际的MadLib内容区分开来。
这个程序可以简单地实现:只需逐字读取文件(或通过令牌标记,请参阅strtok
)将文字写入已完成的输出Mad Lib。每次遇到空白时,都会提示用户输入符合要求的格式结构的单词。
您需要为空白指定格式 - 例如 #noun#或 @verb 可以正常工作。
现在,如果您决定将提示用户的逻辑放入单独的C ++文件中,您只需将其包含在预处理器指令中即可:
#include "path/to/file.h"
如果您的文件位于同一目录中,则只需要文件名。如果这样做,您可能需要首先将实际的 file.cpp 文件编译为其对象形式,以便链接器可以找到它。你可以这样做:
g++ -c file.cpp
然后,继续正常编译应用程序的其余部分。
如果您遵循我的建议,您将在理解现代编程方法方面取得重大进展。如果你转移到一个更大的项目,你会发现所有数据(甚至是内部'字符串)被拉出到单独的文件中,程序逻辑与内容分离。此外,公共代码在共享或应用程序静态库中收集在一起。这打开了大门:
答案 1 :(得分:2)
我怀疑这是否完全回答了你的问题,但考虑到你问题中的细节水平低,我无能为力。