0

这就是正在发生的事情:

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

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

这是一个概述(或没有概述):

有四个源文件:

  • corbit.cpp(主要),

  • initialize.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 保护)“entity.h”,以及“initialization.h”

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

  • corbit.o 在函数“ZNSt6vectorIP10physical_tSaIS1_EE5clearEv”中

  • display.o: [项目目录]..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\locale_facets.tcc(第2497行)(首先定义在这里) <-- 红色高亮

  • corbit.o 在函数“ZNSt6vectorIP10physical_tSaIS1_EE5clearEv”中

  • display.o: [项目目录]..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\locale_facets.tcc(第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、代码块、gcc。我想不出别的了。帮助将不胜感激!

4

1 回答 1

0

是否将其他源文件包含在主源中?您不应该这样做,尤其是当您在多个源文件中包含相同的头文件时。

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

于 2012-06-11T06:00:57.790 回答