1

ヘッダーと cpp ファイルに少し問題があります。小さなテキスト ベースのゲームの作成を開始しました。より多くのファイルを作成し、各クラス (Player.cpp、Monster.cpp エンティティ等..)。

そのため、各 cpp ファイルに多くの#includeディレクティブが作成されました (ヘッダーはまだ使用していません)。

rand関数が必要だったので、各クラスにstdlibを追加し、プレイヤー クラスなどに iostream を追加しました。

それで、同じライブラリを何度も二重または三重に使用することになりました。それを避けるにはどうすればよいですか? それをまったく回避する方法はありますか?(たとえば、ランダムに別のクラスを作成しても機能しません。これは、任意の方法でクラスに追加する必要があるためです)。

前もって感謝します!

編集:しかし、私はこのようなものを持っている場合?:

main.cpp -> Player.h -> stdlib.h

     -> Monster.h -> stdlib.h

警告やエラーなしで stdlib.h をすべてのクラスに含めるにはどうすればよいですか?

言い換えれば、それぞれに同じライブラリをたくさん含めずにヘッダーを作成するにはどうすればよいですか? (Player と Monster は異なるクラスであり、両方とも stdlib が必要です。そのライブラリを一度だけ含めるにはどうすればよいですか?)

4

3 に答える 3

1

「まだヘッダーを使用していません」とはどういう意味ですか? 関数宣言/クラス定義のヘッダーを作成する必要があります。他に合理的な方法はありません。次にinclude Guards
について読む必要があります。インクルード ガードは、ヘッダーが直接的および間接的に 2 回以上インクルードされないようにします。ほとんどすべての最新のコンパイラでは、古い... スタイルの代わりに 使用できます。
#pragma once#if !defined

于 2013-10-11T13:04:32.907 に答える
1

これが間違っている場合は修正してください...複数のポイントで独自のcppファイルを含めることによる再定義の直面するエラー。

1 つの方法は、別の場所に含める必要があるコード ファイルのヘッダーを作成し、このヘッダーでエクスポートを宣言することです。プリプロセッサを使用して、作成されたオブジェクトごとにエクスポートが 1 回定義されていることを確認します

// some_file.h
#ifndef SOME_FILE_H
#define SOME_FILE_H
...
//export declarations
...
#endif

または、コード ファイルを含めることを避け、必要な関数を「extern」として宣言します。

//your_functions.cpp
int some_function( int arg1 )
{
    ...
}

//other_file.cpp
extern int some_function( int );
于 2013-10-11T13:08:09.850 に答える
1

これは最善の方法ではないかもしれませんが、これが私が行う方法です。「MasterHeader.h」ファイルを呼び出すmain.cppファイルが常にあり、そのヘッダーファイル内に他のすべてのヘッダーがあるため、メインでのみ他のすべてのヘッダーを呼び出す1行があり、そのヘッダーは必要なヘッダーを並べ替えます。

そう

main.cpp > MasterHeader.h > myHeader.h、myOtherHeader.h、thisHeader.h

于 2013-10-11T12:57:36.293 に答える