マトリックス管理のロジックをラップするクラスがあります。一方、行列操作操作 (LU 因数分解など) に費やす重要な時間の処理に特化した一連のメソッドがあります。
クラスは、そのファイルで定義された関数を使用します。そのファイルは、そのクラスの要素にアクセスできる必要があります。これらの特殊なメソッドを上記のクラスの友達にする必要があります。これにより、1 つのヘッダーを別のヘッダーに含めることができます。
私の問題
前に説明した状況は、ここで次のようにコーディングされます。最初のコードは を参照していmat.hpp
ます。
#ifndef MAT_HPP
#define MAT_HPP
#include "operations.hpp"
namespace nsA {
template <typename T>
// Templated class because matrices can be real or complex
class mat {
// Members...
friend template <typename U>
void exec_lu(const mat<U>& in, const mat<U>& out);
// Members...
} /* class end */
}
#endif
#endif
2つ目のファイルはoperations.hpp
#ifndef OPERATIONS_HPP
#define OPERATIONS_HPP
#include "mat.hpp"
namespace nsA {
namespace nsB {
template <typename T>
void exec_lu(const mat<T>& in, const mat<T>& out);
}
}
#endif
問題は、コンパイラが不平を言い始めることです。
ノート
mat.hpp
フレンド宣言をコメント化してインクルージョンを残すと、コンパイラーは「operations.hpp」で型mat
が定義されていないことを通知することを考慮してください!
インクルードもコメントし、mat.hpp
フレンド宣言もコメントしておくと、コンパイラは問題ありません!
これに取り組む方法は?
ありがとうございました