1

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

对我有什么帮助?

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

(对不起我的英语不好 :))

4

2 回答 2

2

正如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 的任何地方使用它。

于 2012-06-01T22:25:36.080 回答
1

在大多数项目中,定义在头文件中,实现在源代码文件中。但是模板函数的实现必须在头文件中,因为它们必须对所有使用它们的源文件可见。变量应该在头文件中定义外部并在源文件中声明。常量也可以在头文件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;
}
于 2012-06-01T18:31:31.180 回答