【问题标题】:How do I include other .cpp files [duplicate]如何包含其他 .cpp 文件 [重复]
【发布时间】:2021-12-26 15:49:47
【问题描述】:

我已经看过几个关于 C++ 头文件的教程,并且完全按照他们的说明做了,但我真的不明白为什么我不能使用其他 .cpp 文件中的函数。

Main.cpp

#include <iostream>
#include "Header.h"

int main() {
    std::cout << sum(2, 2);

    return 0;
}

头文件.cpp

#include "Header.h"

int sum(int a, int b) {
    return (a + b);
}

头文件.h

#pragma once

int sum(int a, int b);

【问题讨论】:

  • 你说“我不能使用函数”是什么意思?你是怎么编译代码的?
  • 你没有“包含 cpp 文件”。您编译并链接它们
  • 我在 VS Code 中编码,并且有一个“运行”按钮。控制台说:g++ Main.cpp -o Main
  • 它不是为您构建和链接Header.cpp。此处列出了一些解决方法:stackoverflow.com/questions/51720769/…,也许这会有所帮助?
  • VSCode 默认情况下仅将活动文件构建到您的可执行文件中。 VSCode 文档告诉您如何更改 tasks.json 以构建文件夹中的所有文件:https://code.visualstudio.com/docs/cpp/config-mingw#_modifying-tasksjson

标签: c++ header-files


【解决方案1】:

here 所示,您的程序正在运行。

要让您的程序在您的机器上运行,请按照以下步骤操作(假设您使用的是 g++Ubuntu

第 1 步:使用以下命令创建二进制/可执行文件:

g++ main.cpp Header.cpp -o myexecutable

第 2 步:使用以下命令测试/运行您在上一步中创建的可执行文件:

./myexecutable

替代解决方案:捷径

现在,如果您想知道必须输入每个源文件的名称来生成可执行文件,那么您可以松一口气,因为下面给出了一个快捷方式:

假设您的当前目录中有许多源文件(.cpp 文件),并且您想在不写所有名称的情况下全部编译它们,那么您可以使用命令: p>

g++ ./*.cpp -o myexecutable

上述命令将创建一个名为 myexecutable 的二进制/可执行文件。

【讨论】:

  • 哦...所以我必须手动添加编译时使用的每个 .cpp?谢谢!我以为 VS Code 中的“运行”按钮会自动链接它们
  • 我只能在几分钟后标记。我会将您的答案标记为正确!谢谢
  • 所以我必须手动添加我在编译时使用的每个 .cpp? 您不必手动构建。您可以使用多种方法让 VSCode 构建所有文件,而不仅仅是活动文件。
  • @Chief 还有其他方法,例如使用我个人使用的 构建系统(例如 CMake),可以让构建项目变得更加容易。另一种方法是配置 VS 代码,使其构建所有源文件,而不仅仅是一个源文件。
  • @AnoopRana 我了解 CMake 并想制作一个 Makefile,但我想:“还有其他方法可以完成这项工作吗?”并来到了这里。现在我将随时随地使用 CMake
【解决方案2】:

通过包含文件,预处理器只是使包含的文件成为包含其他文件的文件的一部分。

在 C++ 中,有one definition rule。如果您在其他文件中多次包含一个定义,您就会破坏该规则。就是这样。

一般来说,预处理器和编译器都知道什么是'.h'或'.cpp'文件,这只是一个约定。但是你不能在你的源文件中多次使用相同的定义,如果你链接多个对象或在一个源文件中多次定义相同的定义。

如果您遵循约定,即使用“.cpp”命名您的定义文件,则将它们包含在其他文件中是没有意义的,因为这将导致多个定义。一次在从“.cpp”文件生成的目标文件中,一次在包含“*.cpp”文件的文件中。

您可以在另一个目标文件中包含一次“.cpp”文件并使用它,如果您不链接目标文件,该文件将由该“.cpp”文件生成。但是强烈建议不要做这种奇怪的事情:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2022-12-03
    • 2021-09-21
    • 2021-12-22
    • 1970-01-01
    • 2018-05-22
    • 2015-07-28
    相关资源
    最近更新 更多