所以这就是发生的事情:
一开始,有一个主要的源文件。它在几秒钟内编译,但它长约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。我想不出别的什么。帮助将不胜感激!
答案 0 :(得分:0)
是否将其他源文件包含在主要来源中?您不应该这样做,特别是如果您在多个源文件中包含相同的头文件。
您应该自己编译每个源文件,并使用链接器将这些文件链接在一起。