私は理解できない定義の崩壊を経験します。
概略的に問題は次のとおりです。
メインプロジェクトファイルには2つのインクルードがあります。
include <lib1.h>
include <lib2.h>
最初のヘッダーには、ライブラリからの他のヘッダーがいくつか含まれています。そのうちの1つには、直接(名前空間でカバーされていない)定義があります。
template<typename T> class SparseMatrix;
lib2.hの内部には次のものがあります
namespace lib2
{
using namespace lib3;
class ...
{
...
SparseMatrix<double> ...
...
}
}
名前空間で覆われたlib3の内部には、SparseMatrixクラスの定義もあります。
各ライブラリは個別に問題なくコンパイルされます。を使用する実行可能ファイルをコンパイルしようとすると、コンパイラはエラーを生成します。
lib2.h:70:7: error: reference to 'SparseMatrix' is ambiguous
メインプログラムのどこにも書いていないので、これは私には奇妙に見えます
using namespace lib3;
したがって、これらの定義が崩壊する理由はわかりません。問題について考えられる説明をいただければ幸いです。
もちろん、lib1の定義を独自の名前空間に含めることはできますが、その場合、かなりの数のファイルを変更する必要があります。
コメント:以下の答えは正しいですが、インクルードされたファイルの順序を変更することで問題を回避することもできました。つまり、最初にlib2をインクルードし、次にlib1をインクルードします。