如何创建多文件 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 &gt; 条目,然后选择 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++ 项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 项目中运行多 cpp?

Visual Studio 中的vc++ 2005创建一个C++的项目,求有多线程的例子!!!

如何在 mfc 中为多线程应用程序创建通用日志文件?

C++项目 使用多文件,用两个cpp文件运行报错,而用标准的两个cpp和一个h头文件就能成功,是啥问题?

c++中多文件的组织

项目实战C++多文件写法轻松实现练手小游戏:贪吃蛇