将代码拆分为多个文件

时间:2011-08-01 04:14:44

标签: c++ visual-studio-2010 linker multiple-files

我知道此事已被问过十亿次,但我仍然遇到麻烦。

我从一个包含我所有代码的main.cpp文件开始。说它看起来像这样:

int a = 0;
void foo() {
    a+1;
}

void bar() {
    a+2;
}

int main() {
    foo();
    bar();
    a + 3;
}

现在我想将此代码拆分为多个文件,以便于管理。我希望只有一个标头header.h和三个.cpp文件:main.cppfoo.cppbar.cpp

ATM,这就是我所拥有的:

//header.h
int a = 0;
void foo();
void bar();

//foo.cpp
#include "header.h"
void foo() {a+1;}

//bar.cpp
#include "header.h"
void bar() {a+2;}

//main.cpp
#include "header.h"
int main() {
    foo();
    bar();
    a + 3;
}

不幸的是,链接器一直在抱怨我多次定义a。我尝试过使用#ifdef,但这只是防止在同一个文件中重新定义,对吗?我怎样才能做到这一点?

编辑:修改了问题,我刚才意识到它是多次定义的变量,而不是函数。

2 个答案:

答案 0 :(得分:1)

我认为更大的问题是您标头文件中实现。问题是当您将标头包含到多个目标文件中时,您将在链接器时遇到问题。不要这样做。

使用define进行此类操作。它们的不同之处在于作为预处理器宏的define本身不会创建任何对象代码,也不会创建任何符号。声明某种const类型而不是define是有好处的,但我认为不必担心链接时符号冲突会带来更大的好处。

您的标头文件还需要include guards

答案 1 :(得分:-3)

//header.h
void foo();
void bar();

应该是

extern void foo();
extern void bar();