首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接CPP文件以进行测试时出现LNK2019错误

链接CPP文件以进行测试时出现LNK2019错误
EN

Stack Overflow用户
提问于 2019-11-01 17:26:10
回答 1查看 38关注 0票数 0

我试图编写一个对3级多项式执行运算的立方类。当试图重载+操作符以返回一个新的立方对象时,它会给我一个LNK2019错误:

“未解决的外部符号"public:__thiscall立方::__thiscall (Void)”“(??0 Cubic @@QAE@XZ)在"public: class立方const __thiscall Cubic::operator+(类立方)”(??HCubic@@QAE?BV0 0@v0@@z)中引用“

我试着查看函数声明是否与我的定义不同,但它们都是相同的。我相信问题是在重载运算符,因为我尝试修改每个系数使用rhs.coefficient[i] += coefficient[i]和返回rhs,这是很好的。我之所以想返回一个新的立方体,是因为它看起来更正确,也因为它会使实现-运算符更容易。

Cuic.h文件

代码语言:javascript
复制
#include <iostream>

using namespace std;

    class Cubic
    {
    public:
        // Default constructor
        Cubic();
        // Predetermined constructor
        Cubic(int degree3, int degree2, int degree1, int degree0);

        // Return coefficient
        int getCoefficient(int degree) const;

        // Addition op
        const Cubic operator+(Cubic rhs);

        // Output operators
        friend ostream& operator<<(ostream& outStream, const Cubic& cubic);
    private:
        int coefficient[4];
    };

Cubic.cpp

代码语言:javascript
复制
#include "Cubic.h"
#include <iostream>

using namespace std;

Cubic::Cubic(int degree3, int degree2, int degree1, int degree0)
{
    coefficient[3] = degree3;
    coefficient[2] = degree2;
    coefficient[1] = degree1;
    coefficient[0] = degree0;
}

int Cubic::getCoefficient(int degree) const
{
    return coefficient[degree];
}

const Cubic Cubic::operator+(Cubic rhs)
{
    Cubic result;

    for (int i = 3; i >= 0; i--)
    {
        result.coefficient[i] = coefficient[i] + rhs.coefficient[i];
    }

    return result;
}

ostream& operator<<(ostream& outStream, const Cubic& cubic) {
    outStream << showpos << cubic.getCoefficient(3) << "x^(3)"
        << cubic.getCoefficient(2) << "x^(2)"
        << cubic.getCoefficient(1) << "x"
        << cubic.getCoefficient(0);

    return outStream;
}

Test.cpp

代码语言:javascript
复制
#include "Cubic.h"
#include <iostream>

using namespace std;

int main()
{
    Cubic lhs(3, 1, -4, -1);
    Cubic rhs(-1, 7, -2, 3);

    /* TESTS */
    cout << "Addition using + operator" << endl;
    cout << lhs + rhs << endl;

    return 0;
}

预期的结果应该是+2x^(3)+8x^(2)-6x+2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-01 17:31:31

您的问题是,声明为Cubic类的默认构造函数,如下所示:

代码语言:javascript
复制
// Default constructor
Cubic();

但是,您从未在中定义过构造函数(至少在您所展示的任何代码中都没有)。

您需要定义默认的内联构造函数,如下所示:

代码语言:javascript
复制
// Default constructor
Cubic() { } // This provides a definition, but it doesn't DO anything.

或在其他地方提供单独的定义:

代码语言:javascript
复制
Cubic::Cubic()
{
    // Do something here...
}

您还可以将“做某事”代码添加到内联定义中!如果定义很小(一两行),大多数编码器都会这样做,但是对于更复杂的代码,定义要保持分离。

编辑:或者,正如@Scheff在注释中指出的那样,您可以使用以下方法显式地定义默认构造函数:

代码语言:javascript
复制
// Default constructor
Cubic() = default; // Will do minimal required construction code.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58663363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档