[英]linkage error c++ unresolved external symbol
我正在编写一个Matrix程序:我有一个表示正则矩阵(RegMatrix)的类,和一个表示稀疏矩阵(SparseMatrix)的类,即:仅表示非零值。
在每个H文件的开头,我写了相反的类声明。 例如,在SparseMatrix.h中,我编写了RegMatrix类(以便编译器可以识别我引用的此类)。 在每个cpp文件中,我包括两个H文件。
我的程序可以编译,但是我有很多链接错误,说“未解析的外部符号..”
例如:未解析的外部符号“ public:int__thiscall RegMatrix :: getCol(void)const”(?getCol @ RegMatrix @@ QBEHXZ)“ [文件:SparseMatrix.obj]
我很努力地试图找出我的代码出了什么问题。
基本上,这意味着您程序中的某些内容正在使用RegMatrix类中的getCol,但是您的编译不包括此类例程的主体。
要寻找的东西:
.cpp
文件中进行编码时,是否有可能不小心将RegMatrix::
离开了例程名称的开头? 尽管这不是一个很好的设计,但这与头文件的相互包含无关。 您忘记或输错了定义(忘记了一些const
限定词或类似的东西)。 关于“不太好的设计”声明:您显然交错了两个类,因此它们不能独立使用。 如何在不与SparseMatrix
交错的情况下为RegMatrix
编写单元测试,反之亦然? 我建议使两个定义完全相互独立,并添加一个知道两种矩阵类型的矩阵类型转换器实现。 如果决定添加其他矩阵类型,请考虑这些问题:您将必须修改指数级的文件,才能添加转换。 对于大多数简化设计而言,它看起来像:
regmatrix.h:
class RegMatrix {
// stuff, no mention of SparseMatrix
};
sparsematrix.h:
class SparseMatrix {
// stuff, no mention of RegMatrix
};
conversions.cpp :(在conversions.h中带有声明)
#include "sparsematrix.h"
#include "regmatrix.h"
#include "uppertriangular.h" // got it?
//...
namespace Conversions {
void SparseToRegular(SparseMatrix& pTo, const RegMatrix& pFrom) { .. }
void RegularToSparse(RegMatrix& pTo, const SparseMatrix& pFrom) { .. }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.