「Main.cpp」ファイル内に、クラス内の実装 .cpp ファイル内で実行する必要がある関数があるとします。これについてどうすればいいですか?
関数 findDate を持つ Main.cpp があり、Dates というクラスにある関数内で呼び出す必要があるとします。Main.cpp ファイルを含める際の問題は、すべてが再初期化され、#ifndef を Main.cpp ファイル内で動作させることができないことです。ありがとう!
ファイル main.h で findDate を宣言する (定義しない) 必要があります。次に、findDate を呼び出す必要があるファイルの先頭に .h ファイルを含めます。
これを行うための一般的な手順を次に示します。
#pragma once // Include guard, so you don't include multiple times.
// Declaration (it is okay to have multiple declarations, if they
// have a corresponding definition somewhere)
date findDate (void);
// Definition (it is not okay to have multiple non-static definitions)
date
findDate (void)
{
// Do some stuff
return something;
}
#include "Main.h"
date
Dates::SomeFunction (void)
{
return ::findDate ();
}
「Main.cpp」を含めないでください。これにより、関数の複数の実装とシンボルが作成されfindDate (...)
(関数が宣言されていないと仮定static
)、リンカーはリンク先の出力オブジェクトを特定できなくなります。これは、シンボル衝突または多重定義エラーとして知られています。