如果我只想要架构良好的工作区,但不一定是分开的编译,如何在C++中组织头/代码文件

How to organize header/code files in C++ if I want only well-architectured workspace but not necessarily separated compilation?

本文关键字:C++ 编译 代码 文件 只想 如果 不一定 工作区      更新时间:2023-10-16

我开始用一个cpp文件编写我的程序,但现在我的代码太多了,所以我决定把它分开。但问题是我有很多常量,包含和其他一些我想放在一个地方的东西。不幸的是,代码的依赖部分需要所有这些,所以我不能用通常的包含文件来做到这一点。

什么会对我有帮助?

(我在Linux下编写并使用命令行编译)

(对不起我的英语:))

正如Hristo所说,你通常应该在头文件中编写定义,并将实现写在源代码文件中。

但是要回答您的问题:

但问题是我有很多常量,包含和其他一些我想放在一个地方的东西。

通常做的是创建一个名为"common.h"或"defs.h"的文件(我的想法来自Doom...),该文件有许多定义,你发现你在整个程序中都需要。如果使用常量,请在头文件中声明常量,如下所示:

    extern const int MAX_SOMETHING;
    extern const bool TRUTH_VALUE;

并创建一个定义这些常量的补充源文件(defs.cpp 或 common.cpp):

    const int MAX_SOMETHING = 5;
    const bool TRUTH_VALUE = true;
所以现在当你在其他源文件中包含common/

defs.h时,extern关键字会告诉该源文件该定义在另一个源文件中(它在common/defs.cpp中),所以它会在那里找到定义,你可以在任何包含common/defs.cpp的地方使用它。

在大多数项目中,定义位于头文件中,实现位于源代码文件中。但是,模板函数的实现必须位于头文件中,因为它们必须对使用它们的所有源文件可见。变量应在头文件中定义 extern,并在源文件中声明。常量也可以在头文件中声明为静态

例:

福.h

#pragma once
class Foo{
    public:
        void bar();
        template<class Type>
        void increment(Type &a){
            ++a;
            return;
        }
};
extern Foo theFoo;
static const int five=5;

福.cpp

#include "Foo.h"
#include <iostream>
void Foo::bar(){
    std::cout<<"Foo::bar called"<<std::endl;
    return;
}
Foo theFoo;

主.cpp

#include "Foo.h"
#include <iostream>
int main(){
    theFoo.bar();
    std::cout<<five<<std::endl;
    return 0;
}