0

だからここに何が起こっているのですか:

最初は、1 つのメイン ソース ファイルがありました。コンパイルは数秒で完了しましたが、1000 行ほどの長さだったので、個別の .h/.cpp の組み合わせに分割し始めました。良いニュースは、私のメイン ソースの長さが 500 行以下になったことですが、悪いニュースは、それを完全にコンパイル/リンクできないことです。

それで、しばらく続けていますが、一向に良くなりません。

概要は次のとおりです (または概要なし):

次の 4 つのソース ファイルがあります。

  • 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 ガードを使用して) 「entity.h」と「initialization.h」が含まれています。

GCC を使用して Codeblocks でコンパイルすると、locale_facets.tcc (それが何であるか知っている人はいますか?) が空のファイルとして開きます。また、次の 2 つのエラー メッセージが表示されます。

  • 関数 'ZNSt6vectorIP10physical_tSaIS1_EE5clearEv' 内の corbit.o

  • display.o: [プロジェクト ディレクトリ]..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\locale_facets.tcc (2497 行目) (ここで最初に定義) ) <-- 赤くハイライト

  • 関数 'ZNSt6vectorIP10physical_tSaIS1_EE5clearEv' 内の corbit.o

  • 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

私は iostream、math.h、allegro.h などのさまざまな .cpp ファイルを持っているので、それらが定義している関数は構文エラーなしでコンパイルできます。

Windows、コードブロック、gcc を使用。私は他に何も考えられません。助けていただければ幸いです!

4

1 に答える 1

0

他のソースファイルをメインソースに含めていますか?特に、同じヘッダーファイルを複数のソースファイルにインクルードする場合は、そうしないでください。

各ソースファイルを単独でコンパイルし、リンカーを使用してそれらのファイルをリンクする必要があります。

于 2012-06-11T06:00:57.790 に答える