gpt4 book ai didi

c++ - 模块化在 C++ 中是如何工作的

转载 作者:太空狗 更新时间:2023-10-29 20:42:04 25 4
gpt4 key购买 nike

目前,我正在学习c++和一个关于模块化过程的问题。假设我想写一个函数来添加两个或三个数字。为此,我编写了以下头文件:

// Sum2.hpp
//
// Preprocessor directives; ensures that we do not include a file twice
// (gives compiler error if you do so)
#ifndef Sum2_HPP
#define Sum2_HPP
/////////// Useful functions //////////////////
// Max and Min of two numbers
double Sum2(double x, double y);
// Max and Min of three numbers
double Sum2(double x, double y, double z);
////////////////////////////////////////////////
#endif

这只是声明。在一个单独的文件中,我指定了函数:

// Sum2.cpp
// Code file containing bodies of functions
//
#include "Sum2.hpp"
/////////// Useful functions //////////////////
// Sum of two numbers
double Sum2(double x, double y)
{
return x+y;
}
// Sum of three numbers
double Sum2(double x, double y, double z)
{
return Sum2(Sum2(x,y),z);
}

然后,在主程序中我想使用这些函数:

// main.cpp

#include <iostream>
#include "Sum2.hpp"

int main()
{
double d1;
double d2;
double d3;
std::cout<<"Give the first number ";
std::cin>> d1;
std::cout<<"Give the second number ";
std::cin>> d2;
std::cout<<"Give the third number ";
std::cin>> d3;

std::cout<<"The sum is: "<<Sum2(d1,d2);
std::cout<<"The sum is: "<<Sum2(d1,d2,d3);

return 0;
}

我使用 g++ -c Sum2.cpp 生成目标代码 Sum2.o。为什么当我想从主代码编译和创建可执行文件时出现引用错误,即 g++ -o main main.cpp

当我同时编译两者时它正在工作,即 g++ -o main main.cpp Sum2.cpp。我想通过创建目标代码 Sum2.o 并将头文件包含在 main.cpp 中,编译器将自动识别目标代码。为什么这不起作用?

最佳答案

// Preprocessor directives; ensures that we do not include a file twice
// (gives compiler error if you do so)

实际上,它不会给出编译器错误。它不会做任何事情。

至于您的实际问题,与其他一些语言不同,c++ 不会尝试为您查找目标文件。你必须告诉编译器它们在哪里。对于这个应用程序,你真的应该像这样编译它:

g++ -c main.cpp
g++ -c Sum2.cpp
g++ -o main main.o Sum2.o

前两个实际编译代码。第二个将代码链接在一起以生成可执行文件。如果你执行

g++ -o main main.cpp Sum2.cpp

编译器会自动为您运行这两个步骤。它适用于小型项目,但对于大型项目,您不希望运行所有步骤,除非发生某些变化。

现在,您可能认为这很痛苦。你是对的。这就是为什么有各种工具(如 CMake、Scons、Jam、Boost.Build)旨在简化 C++ 项目的构建。

关于c++ - 模块化在 C++ 中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com