如何创建多文件 C++ 项目
Posted
技术标签:
【中文标题】如何创建多文件 C++ 项目【英文标题】:How Do I Create Multi-File C++ Projects 【发布时间】:2020-06-05 19:52:01 【问题描述】:我知道这里有类似的问题,但我找不到答案。我相信我在 Windows 10 GNU 编译器上使用 code::blocks。我在一个项目中有三个文件,(我正在尝试制作一个二进制到十进制转换器,仍然是初学者,所以代码也可以接受建议,)源文件夹中的 main.cpp 和 functions.cpp,和头文件中的functions.h。我不知道如何正确链接它们,我一直在尝试的是: 在 main.cpp 中,
#include <iostream>
#include "functions.h"
using namespace std;
int main()
long long number_In_Binary;
cout << "Please enter a binary number: ";
cin >> number_In_Binary;
cout << number_In_Binary << " in decimal is " <<
binaryToBaseTen(number_In_Binary) << endl;
return 0;
在functions.cpp中,
#include <iostream>
#include <cmath>
#include "functions.h"
using namespace std;
int binaryToBaseTen(long long binaryNum)
int baseTen = 0;
int iterations = 0;
while (binaryNum > 0)
int binaryDigit = binaryNum % 10;
if (binaryDigit == 1)
baseTen += pow(2.0, iterations);
;
iterations ++;
binaryNum /= 10;
;
return baseTen;
;
和functions.h,
#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED
using namespace std;
int binaryToBaseTen(long long binaryNum);
#endif // FUNCTIONS_H_INCLUDED
再一次,代码很糟糕,因为我还在学习绳索,但只有一个函数,所以在头文件中链接似乎并不难。如果我只是用“#include”functions.cpp“”替换main.cpp的“#include”functions.h“”,但我想学习使用头文件。上面的代码给我的错误是
"对'binaryToBaseTen(long long)'的未定义引用。
有什么建议吗?
【问题讨论】:
请不要将 html/CSS/JS sn-ps 用于 C++ 问题(或除 HTML/CSS/JS 之外的任何其他问题)。 我认为问题是functions.cpp
不是您的项目的一部分,但我不使用 Code::Blocks 所以我对 IDE 无能为力。是否有“将文件添加到项目”菜单项或类似菜单项?
假设您在 Code::Blocks 中打开了所有这些文件是否正确?如果您右键单击“functions.cpp”选项卡,是否有“将文件添加到活动项目”选项? “从项目选项中删除文件”?如果您都没有看到,我想File
菜单中有关项目的选项(例如“将项目另存为”)处于非活动状态?
另外,您介意我将您的代码精简为一个更简单的示例吗?那里的噪音超出了必要的范围(但对于第一次尝试来说还不错)。
是的,修剪它很酷。我只是想了解完整的上下文,以防问题不是我想的那样。此外,所有文件都在同一个项目中打开。感谢您的帮助。
【参考方案1】:
提问者没有提供说明,所以我不知道这个答案的适用性如何。但是,它可能对未来有相同问题的读者有用。 我目前使用 Code::Blocks 版本 16.01;细节(例如菜单选项的位置)可能在其他版本中有所不同。
确保您有一个打开的项目
官方的“项目”告诉 Code::Blocks 将多个翻译单元链接到一个可执行文件中。因此,如果只编译一个文件,首先要检查的是您实际上已经打开了一个项目,而不仅仅是将文件添加到工作区。 Code::Blocks 在这方面可能有点令人困惑,因为您可以在不打开项目的情况下打开文件。
查看您是否打开了项目的一种方法是转到File
菜单。如果没有项目打开,Save project as...
和 Close project
条目将被禁用。如果这些条目被禁用,请转到 New >
条目,然后选择 Project...
以创建一个新项目。
确保你有一个项目打开
另一个潜在的混淆来源是 Code:Blocks 允许您同时打开多个项目。虽然这不是一件坏事,但它增加了复杂性。在解决此问题时为简单起见,请关闭除一个以外的所有项目。
如果你不确定你打开了多少项目,你可以关闭所有项目(File
menu -> Close all projects
)然后打开应该有你想要编译的文件的项目(File
menu -> Recent projects
可能会让您快速完成此操作)。
确保文件在项目中
打开一个项目后,查看文件。您可以打开一个文件,但项目中没有它。
右键单击每个文件。这可以在项目的树视图中或在编辑器窗格中该文件的选项卡中完成。如果您可以选择Remove file from project
,那么它就在项目中。另一方面,如果您看到 Add file to active project
,则该文件尚未在项目中 - 选择该选项以添加它。
确保文件在构建目标中
当您向项目添加文件时,系统会询问您应该与哪些构建目标相关联。 (默认情况下,您的构建目标是“debug”和“release”。)我不知道为什么这个选项存在,也不知道为什么默认(在我的 Code::Blocks 版本中)是将它添加到 no目标。每当我将文件添加到项目中时,我都希望它属于所有构建目标。我可以咆哮,但让我们继续做什么。
右键单击每个文件并选择Properties...
。这可以在项目的树视图中或在编辑器窗格中该文件的选项卡中完成。切换到Build
选项卡。如果文件在项目中,则此选项卡允许您选择编译和链接文件(默认选择,这很好),并允许您选择它所属的目标。确保选择了所有目标。
如果您发现属性窗口令人生畏,另一种方法是从项目中删除该文件,然后重新添加它。只要确保在提供选项时选择所有构建目标即可。
成功了吗?
目前我能想到的就这些了。我想最有可能的情况是文件在项目中但不在构建目标中。其他可能性是潜在的混淆点,但如果您像 OP 那样认为“一个项目中有三个文件”,则不太容易陷入困境。
【讨论】:
这个答案非常有帮助(而且组织得非常好),结果证明我的文件不在构建目标中。我回去并将它们添加到构建目标中,它就像一个魅力。我是多么愚蠢的香肠!无论如何,非常感谢您的帮助,愿编程之神对您微笑,直到您键入最后一个分号。以上是关于如何创建多文件 C++ 项目的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 中的vc++ 2005创建一个C++的项目,求有多线程的例子!!!