オープンソースのVC++コードを使用しようとしています。悪夢になってしまった既存のVC++ソリューションに新しいプロジェクトを追加しようとしています。私が直面している問題の1つは、「タイプの再定義」エラーを修正することです。すでにいくつか修正しましたが、今は他のいくつかで立ち往生しています。コードベースは巨大なので、スニッペストはありません...
私の質問は、これらのエラーを追跡するための「ベストプラクティス」はありますか?
ありがとう。
オープンソースのVC++コードを使用しようとしています。悪夢になってしまった既存のVC++ソリューションに新しいプロジェクトを追加しようとしています。私が直面している問題の1つは、「タイプの再定義」エラーを修正することです。すでにいくつか修正しましたが、今は他のいくつかで立ち往生しています。コードベースは巨大なので、スニッペストはありません...
私の質問は、これらのエラーを追跡するための「ベストプラクティス」はありますか?
ありがとう。
タイプの再定義により、ワークスペースプロジェクトで同じ名前のclass
esまたはtypedef
sが定義されており、コンパイル中に問題が発生していると思います(複数定義のリンカーエラーと混同しないでください)。
namespace
ベストプラクティスは、常にそれらをモジュールまたはプロジェクトベースで囲むことです。
例えば
// project1.h
namespace project1 {
class X {};
}
// project2.h
namespace project2 {
class X {};
}
私のアドバイスは、すべてのコードを別々のプロジェクトの別々の名前空間に配置することです。そうすれば、衝突を心配する必要はありません。大量のヘッダー ファイルとソース ファイルがある場合は大変な作業になるかもしれませんが、長い目で見れば価値があるかもしれません。
また、名前空間をすべての関数/クラスに追加する必要はありませんnamespace foo {
。すべてのヘッダー/ソース ファイルの上部に追加し、対応する}
を下部に追加するだけです。
A が B を呼び出し、B が C を呼び出すなど、2 つ以上の異なるプログラムに同じヘッダー ファイルをインクルードしようとすると、A と B の両方に C をインクルードすると、この種のエラーが発生します。同じことが私にも起こり、解決しました。