gpt4 book ai didi

c++ - 尝试用 C++ 创建库。测试项目找不到已声明构造函数的实现?

转载 作者:行者123 更新时间:2023-11-30 03:52:32 25 4
gpt4 key购买 nike

我正在学习 C++,但在尝试创建库时遇到瓶颈。使用 Visual Studio 2013,我收到此错误:

Error 1 error LNK2019: unresolved external symbol "public: __thiscall Polynomial::Polynomial(void)" (??0Polynomial@@QAE@XZ) referenced in function _main A:\Medier\Desktop\PolyLib\Test\Test.obj Test

测试项目目前缩减为:

#include "A:\Medier\Desktop\PolyLib\PolyLib\PolyLib.h"

using namespace std;

void main()
{
Polynomial poly;
}

库头文件 PolyLib.h 如下所示:

using namespace std;

class Polynomial {

private:
double* Coefficients; //Array of coefficients - Pointer type.
int Degree; //The highest exponent of the polynomial

public:
Polynomial(); //Default constructor - Creates the trivial polynomial 0.
Polynomial(int degree, double coefficients[]); //Constructor for specific polynomials

库中终于有了一个CPP文件,PolyLib.cpp,提供了头文件的实现。看起来像这样:

#include "PolyLib.h"

using namespace std;

Polynomial::Polynomial() {
Degree = 0;
Coefficients = new double[Degree + 1];
Coefficients[0] = 0;
}

Polynomial::Polynomial(int degree, double coefficients[]) : Degree(degree), Coefficients(coefficients) {
int i = 0;

我知道我的测试项目查看 PolyLib.h 文件以查看可用的内容。我理解错误说它找不到多项式的空构造函数的实际实现。因此,我得出结论,PolyLib.cpp 文件未被使用。

谁能告诉我从这里去哪里?

最佳答案

可以将所有 .cpps 构建到一个项目中,这对于初学者来说是最常见的。但是,根据问题标签和措辞,我假设您想创建并链接一个静态库,这也可以相当简单地完成。

我刚刚构建了一个在一个 VS2013 项目中正确设置静态 lib + exe 链接的示例:Dropbox link ,为了解释这个问题。

基础知识是您需要两个项目:一个 lib 项目(输出一个静态 .lib 文件)和一个 exe 项目(输出一个 .exe 文件)。 .exe 项目包含一个 main() 函数,并且能够包含 header 和指向 .lib 的链接。

MyExe 的有趣之处在于我将 $(SolutionDir)\LibExample\Inc 添加到包含路径以包含我的 header (header.h),并且我添加了 $(SolutionDir)\$(Configuration) 到库的 lib 路径。您可以通过右键单击项目找到它们,转到属性,它们都在“VC++ 目录”下。

关于确定找到您的库所需的路径的一个很好的技巧是简单地构建库。它实际上在“Output->Build”文本中告诉你刚刚构建的文件所在的位置。这是您需要的路径。 $(SolutionDir)\$(Configuration) 是此路径的“宏”简写。我建议使用宏,这样您就可以轻松地将项目目录移动到另一个路径或计算机。

我还在链接器\输入设置中添加了 LibExample.lib; 到“附加依赖项”。这是能够链接库的关键步骤。不这样做将导致无法解析的外部符号,就像您看到的那样。

我还在 MyExe 和 LibExample 之间设置了依赖关系(右键单击项目,Build Dependencies->Project Dependencies)。这很重要,因此您可以重建整个解决方案而不必担心链接到旧版本的库。有了适当的依赖关系,它总是会首先构建库,然后是 exe。

关于c++ - 尝试用 C++ 创建库。测试项目找不到已声明构造函数的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com