如果我只想要架构良好的工作区,但不一定是分开的编译,如何在C++中组织头/代码文件
How to organize header/code files in C++ if I want only well-architectured workspace but not necessarily separated compilation?
我开始用一个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;
}