我尝试查找这个并使用头文件等获得混合结果.
基本上我有多个cpp文件,其中包含我用于二叉树,BST,链表等的所有功能.
我想要做的不是必须复制和粘贴函数,因为我需要它们,我希望能够做到
#include <myBSTFunctions.h>
Run Code Online (Sandbox Code Playgroud)
并能够调用和使用我自己的功能.
完成此任务的步骤是什么?使用我使用的所有函数原型制作头文件?在哪里使用所有实际功能来放置cpp和头文件?有没有办法可以直接调用函数文件的目录?
即我更想把它与主源cpp文件放在同一个文件夹中,与我的一些同事分享.
我怎么能做到这一点?
编辑:Windows.miniGW编译器
小智 8
在标头中声明函数
//MyFunctions.h
int myFunction1(int,int);
int myFunction2(int,int);
Run Code Online (Sandbox Code Playgroud)
在MyFunctions.cpp中实现它们
//MyFunctions.cpp
#include "MyFunctions.h"
int myFunction1(int a, int b){
//your code
}
int myFunction2(int a, int b){
//your code
}
Run Code Online (Sandbox Code Playgroud)
将标题包含在您想要的任何文件中
//OtherFile.cpp
#include "MyFunctions.h"
//Now you have access to the functions defined in MyFunctions.h in this file
Run Code Online (Sandbox Code Playgroud)
我不知道miniGW,但它应该看起来像g ++ otherfile.cpp MyFunctions.cpp ...
这很简单。正如JMAA 所说,您应该做一些研究来理解这些概念,但实际上,您应该这样做:
您将定义一个functionsExample.cpp,您必须在其中定义所有函数,还定义一个functionsExample.h,您将在其中声明您的函数。
您将把它作为functionExample.cpp:
#include "functionsExample.h"
#include <iostream>
int example(int x, int y)
{
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
将此作为functionExample.h:
#ifndef FUNCTIONSEXAMPLE_H
#define FUNCTIONSEXAMPLE_H
int example(int x, int y);
#endif
Run Code Online (Sandbox Code Playgroud)
然后在 .cpp 文件中您要运行示例函数。只需添加:
#include "functionsExample.h"
Run Code Online (Sandbox Code Playgroud)
但正如我所说,您应该对标头保护、预处理器指令和文件组织进行一些研究,以便对此有更深入的了解。我会推荐一些链接:
您似乎在构建程序方面缺少一些非常基本的概念。我将为您提供一个非常基本的入门,但是您将不得不在其他地方找到更完整的答案,才能真正了解正在发生的事情并获得设置的详细信息。
通常,您告诉编译器编译每个cpp文件。当cpp文件具有一条#include语句时,该语句基本上将included文件复制并粘贴到您的cpp文件中,然后再进行编译(这由预处理程序完成)。编译器处理的每个完整单元(包含附件的cpp文件)都称为转换单元。每个翻译单元产生一个目标文件。
目标文件包含已编译的代码,但是它们通常不完整。也就是说,它们包含对其中未包含的代码的引用。基本上,他们可以说“现在调用此函数,我不知道它在哪里或在做什么,但是您应该调用它”。
该接头然后被用于链接对象的文件,或许连同库,成可执行(或文库)。链接器的工作是通过在其他目标文件和库中查找相关代码来“解析”对每个目标文件中外部代码的所有引用。
库有两种形式:共享库(.dllWindows中的s)和静态库。静态库通过链接器链接到可执行文件(或其他库),这意味着您可以在不使用该库的情况下使用该可执行文件(相关的库代码将成为可执行文件的一部分)。您还可以针对共享库链接可执行文件/库,在这种情况下,每次运行可执行文件时都需要该共享库的副本-操作系统需要先将编译后的代码动态链接到共享库,运行它。
所以,回到您的问题。
大致来说,您有三种选择:编译然后cpp每次都在一个项目中直接链接所有文件;将有用的可重用代码编译到静态库中,然后将您的项目链接到该库;或将有用的可重用代码编译到共享库中,将您的项目链接到该共享库,并确保随结果一起发送共享库以便可以运行它。
任何合理规模的项目都将其中至少两个结合起来。多个cpp文件将成为项目代码的一部分,这些文件将被编译为单独的翻译单元,并提供给链接器。大多数项目还会使用某些库(您自己编写或其他人编写的),这些库会适当地进行静态或动态链接。
不幸的是,(imho)C ++作为一种语言并没有一个单独的构建系统来为您组织所有这些(最近的语言经常这样做)。有几种不同的编译器/链接器以及许多不同的构建系统都可以完成所有这些工作。不幸的是,您需要采取的具体步骤很大程度上取决于您选择的编译器和构建系统。
| 归档时间: |
|
| 查看次数: |
8156 次 |
| 最近记录: |