这就是正在发生的事情:
一开始,有一个主要的源文件。它在几秒钟内编译完成,但大约有 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。我想不出别的了。帮助将不胜感激!