私は現在のプロジェクトのユーティリティ関数を書いています。クラスの多重定義
今、私は静的メソッドを持つクラスを定義utility.hヘッダを有する:
#pragma once
class Utils
{
public:
static int firstFunc()
{
return 0;
}
static bool secondFunc()
{
return false;
}
};
このヘッダは、私が2つの変換単位に(このような機能を使用する必要があるたびに含まれています瞬間)それはうまく動作します。
コードレビューの後、このクラスをCスタイルの関数に置き換えることを提案しました。私の素朴な最初の試み:
#pragma once
int firstFunc()
{
return 0;
}
bool secondFunc()
{
return false;
}
が機能エラーの複数の定義を返し、リンクに失敗しました。 私はこれがなぜ起こるのか理解しています。関数定義を含むutils.hというヘッダーは、2つの異なるコンパイル単位に存在します。リンカーは、使用する定義がわかりません。
解決策は、定義を専用のutils.cppに移動し、ヘッダーに宣言だけを残すことです。
私の質問は今です:異なるクラスの翻訳単位で同じクラスの複数の定義がまだあったときに、静的メソッドを持つクラスを作成したときに、なぜこのようなことが起こりませんでしたか?
私はあなたにはC++を学ぶJavaプログラマーですか? (申し訳ありませんがあなたを怒らせる場合)これはJava技術で、クラスを悪用して名前のスコープを提供します。 C++では 'namespace'を使ってこれを行います。 –