我开始在一个 cpp 文件中编写我的程序,但现在我的代码太多了,所以我决定将它分开。但问题是我有很多常量,包括和其他一些我想在一个地方拥有的东西。不幸的是,代码的依赖部分都需要它们,所以我不能用通常的包含文件来做到这一点。
对我有什么帮助?
(我在Linux下编写并用命令行编译)
(对不起我的英语不好 :))
我开始在一个 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 的任何地方使用它。
在大多数项目中,定义在头文件中,实现在源代码文件中。但是模板函数的实现必须在头文件中,因为它们必须对所有使用它们的源文件可见。变量应该在头文件中定义外部并在源文件中声明。常量也可以在头文件static中声明。
例子:
Foo.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;
Foo.cpp
#include "Foo.h"
#include <iostream>
void Foo::bar(){
std::cout<<"Foo::bar called"<<std::endl;
return;
}
Foo theFoo;
主文件
#include "Foo.h"
#include <iostream>
int main(){
theFoo.bar();
std::cout<<five<<std::endl;
return 0;
}