我有一个包含矩阵管理逻辑的类。同时我有一套方法专门用于处理一些重要的时间花费矩阵操作操作(如 LU 分解等)。
该类使用该文件中定义的函数。该文件需要有权访问该类的元素。我需要让那些专门的方法成为上述课程的朋友。这导致我在每个其他标题中包含一个标题。
我的问题
我之前描述的情况在这里编码如下。第一个代码是指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
第二个文件是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
并保持朋友声明也注释,编译器就可以了!
如何解决这个问题?
谢谢