繁体   English   中英

链接错误C ++无法解析的外部符号

[英]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,但是您的编译不包括此类例程的主体。

要寻找的东西:

  • 您是否真的创建了该例程的实现? 使用完全相同的参数配置文件?
  • 您是否忘记将可编译该例程的源文件添加到要编译并链接到程序的源文件列表中? (在VisualStudio中,您是否将其添加到项目中?)
  • 当您在.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM