将麻烦与多个文件联系起来

时间:2012-06-11 01:44:51

标签: c++ windows gcc linker codeblocks

所以这就是发生的事情:

一开始,有一个主要的源文件。它在几秒钟内编译,但它长约1000行,所以我开始将它分成单独的.h / .cpp组合。好消息是我的主要来源现在大约是500行,但坏消息是我无法完全编译/链接它。

所以我已经有一段时间了,但它没有变得更好。

以下是概述(or no overview):

有四个源文件:

  • corbit.cpp(主要),

  • initialization.cpp(初始化实体向量),

  • entity.cpp(实体类文件),

  • display.cpp(HUD和相机类文件)。

Main包含所有其他源文件,如“display.h”。另外,(例如)allegro.h。

display.cpp包含“entity.h”(带有#ifndef ENTITY_H保护内容)和“display.h”,以及(例如)allegro.h

entity.cpp包含“entity.h”

initialization.cpp包括(再次使用#ifndef guard)“entity.h”,以及“initialization.h”

当我在Codeblocks中使用GCC进行编译时,它会打开locale_facets.tcc(任何人都知道它是什么?)作为空文件。它还给出了两条错误消息,如下所示:

  • corbit.o在函数'ZNSt6vectorIP10physical_tSaIS1_EE5clearEv'

  • display.o:[project directory] ​​.. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ bits \ locale_facets.tcc(line 2497)(这里首先定义)< - 突出显示红色

  • corbit.o在函数'ZNSt6vectorIP10physical_tSaIS1_EE5clearEv'

  • display.o:[project directory] ​​.. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ bits \ locale_facets.tcc(line 2497)(这里首先定义)< - 突出显示红色

,看起来完全相同。在我的主要内容我宣布了

std::vector<physical_t*> entity;

(physical_t是实体类),可能与第一条消息有关。

在每个.h文件中我都有

#ifndef FILENAME_H
#define FILENAME_H
[declarations]
#endif

每当我包含一个与我所包含的.cpp文件不对应的标题时,我将其包含在

#ifndef FILENAME_H
#include "filename.h"
#endif

我有不同的.cpp文件,包括iostream,math.h,allegro.h等等,这样他们定义的函数可以编译而不会出现语法错误。

使用Windows,codeblocks,gcc。我想不出别的什么。帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

是否将其他源文件包含在主要来源中?您不应该这样做,特别是如果您在多个源文件中包含相同的头文件。

您应该自己编译每个源文件,并使用链接器将这些文件链接在一起。