C++ C++;重载运算符问题

C++ C++;重载运算符问题,c++,operator-keyword,C++,Operator Keyword,这是我的头文件: #pragma once #ifndef HYPERINT_H #define HYPERINT_H #include <iostream> #include <vector> class Hyperint { public: Hyperint(); Hyperint(long a); ~Hyperint(void); Hyperint & operator*= (const Hyperint & right); std::ve

这是我的头文件:

#pragma once
#ifndef HYPERINT_H
#define HYPERINT_H
#include <iostream>
#include <vector>

class Hyperint
{
public:
Hyperint();
Hyperint(long a);
~Hyperint(void);


Hyperint & operator*= (const Hyperint & right);


std::vector<int> hyperintVector;

};

Hyperint operator* (const Hyperint & left, const Hyperint &right);

#endif
#pragma一次
#ifndef HYPERINT_H
#定义超整数
#包括
#包括
类Hyperint
{
公众:
Hyperint();
Hyperint(长a);
~Hyperint(void);
Hyperint和运算符*=(常量Hyperint和右侧);
std::向量超整数向量;
};
Hyperint运算符*(常量Hyperint&左,常量Hyperint&右);
#恩迪夫
这是我的cpp文件:

#include "stdafx.h"
#include "Hyperint.h"
using namespace std;

Hyperint::Hyperint(long a)
{
//vector<int> hyperint;
int b = a;
while (b != 0){
    int h = b % 10;
    this->hyperintVector.push_back(h);
    b = b / 10;
}
}


Hyperint::~Hyperint()
{
}

Hyperint operator*(const Hyperint & left, const Hyperint & right){
vector<int> leftVec = left.hyperintVector;
vector<int> rightVec = right.hyperintVector;
vector<int> resultVector;
Hyperint result;

int carry = 0;
int counter1 = 0;
for (vector<int>::const_iterator it = leftVec.begin(); it != leftVec.end(); ++it){

    int counter2 = 0;
    int totalOperand = 0;
    for (vector<int>::const_iterator it2 = rightVec.begin(); it2 != rightVec.end(); ++it2){
        double pow2 = pow(10, counter2);
        totalOperand += ((*it2) * ((int) pow2)) * (*it);
        ++counter2;
    }
    totalOperand += carry;
    int store = totalOperand % 10;
    resultVector.push_back(store);
    carry = totalOperand / 10;
    ++counter1;
}
while (carry != 0){
    int putIn = carry % 10;
    resultVector.push_back(putIn);
    carry /= 10;
}
result.hyperintVector = resultVector;
return result;
}

Hyperint & Hyperint::operator*=(const Hyperint & right){
vector<int> rightVec = right.hyperintVector;
//vector<int> leftVec = this->hyperintVector;
vector<int> resultVector;
Hyperint theResult;
int carry = 0;
int counter1 = 0;

for (vector<int>::const_iterator it = (this->hyperintVector).begin(); it != (this->hyperintVector).end(); ++it){

    int counter2 = 0;
    int totalOperand = 0;
    for (vector<int>::const_iterator it2 = rightVec.begin(); it2 != rightVec.end(); ++it2){
        double pow2 = pow(10, counter2);
        totalOperand += ((*it2) *((int)pow2)) * (*it);
        ++counter2;
    }
    totalOperand += carry;
    int store = totalOperand % 10;
    resultVector.push_back(store);
    carry = totalOperand / 10;
    ++counter1;
}
while (carry != 0){
    int putIn = carry % 10;
    resultVector.push_back(putIn);
    carry = carry/10;
}
(this->hyperintVector) = resultVector;
return *this;
}
#包括“stdafx.h”
#包括“Hyperint.h”
使用名称空间std;
Hyperint::Hyperint(长a)
{
//向量超整数;
int b=a;
而(b!=0){
inth=b%10;
这->超整数向量。向后推(h);
b=b/10;
}
}
Hyperint::~Hyperint()
{
}
Hyperint运算符*(常量Hyperint&左,常量Hyperint&右){
向量leftVec=left.hyperintVector;
向量rightVec=right.hyperintVector;
向量结果向量;
Hyperint结果;
整数进位=0;
int计数器1=0;
for(vector::const_迭代器it=leftVec.begin();it!=leftVec.end();++it){
int计数器2=0;
整数总操作数=0;
for(vector::const_迭代器it2=righvec.begin();it2!=righvec.end();++it2){
双功率2=功率(10,计数器2);
TotalOperator+=((*it2)*((int)pow2))*(*it);
++计数器2;
}
总操作数+=进位;
int store=总操作数%10;
结果Vector.推回(存储);
进位=总操作数/10;
++计数器1;
}
while(进位!=0){
整数=进位%10;
结果:推回(普京);
进位/=10;
}
result.hyperintVector=resultVector;
返回结果;
}
Hyperint&Hyperint::运算符*=(常量Hyperint&right){
向量rightVec=right.hyperintVector;
//vector leftVec=此->hyperintVector;
向量结果向量;
Hyperint结果;
整数进位=0;
int计数器1=0;
对于(vector::const_iterator it=(this->hyperintVector).begin();it!=(this->hyperintVector.end();+it){
int计数器2=0;
整数总操作数=0;
for(vector::const_迭代器it2=righvec.begin();it2!=righvec.end();++it2){
双功率2=功率(10,计数器2);
TotalOperator+=((*it2)*((int)pow2))*(*it);
++计数器2;
}
总操作数+=进位;
int store=总操作数%10;
结果Vector.推回(存储);
进位=总操作数/10;
++计数器1;
}
while(进位!=0){
整数=进位%10;
结果:推回(普京);
进位=进位/10;
}
(this->hyperintVector)=resultVector;
归还*这个;
}
现在问题出现了,当我编译它。。。我得到1个错误,我不知道它是什么,它意味着什么,为什么以及如何修复它

错误1错误LNK2019:未解析的外部符号“public:u thiscall Hyperint::Hyperint(void)”(??0Hyperint@@QAE@XZ)在函数“public:class Hyperint&u_thiscall Hyperint::operator*=(class Hyperint const&)”中引用(??xhyperprint@@QAEAAV0@ABV0@@Z)C:\Users\Drock\documents\visual studio 2013\Projects\A3 trunt\A3 trunt\Hyperint.obj A3 trunt


这意味着链接器正在尝试查找
Hyperint::Hyperint()
的定义,但找不到它。您需要提供它的实现

链接器错误可能会让人困惑,甚至比编译器错误更让人困惑,因为名称会变得混乱,并且您经常会丢失生成该错误的代码中的确切位置。让我们看一下您的错误消息,因为它包含您需要的所有信息,只是显示得不好。我将把重要的部分加粗

错误1错误LNK2019:未解析的外部符号“public:\u thiscall Hyperint::Hyperint(void)”(??0Hyperint@@QAE@XZ)在函数“public:class Hyperint&\u thiscall Hyperint::operator*=(class Hyperint const&)”中引用(??xhyperprint@@QAEAAV0@ABV0@@Z)C:\Users\Drock\documents\visual studio 2013\Projects\A3 trunt\A3 trunt\Hyperint.obj A3 trunt

就人类而言,VisualStudio抱怨它的链接器遇到了一个名为LNK2019的错误,这是由于在执行函数Hyperint::operator*=(类Hyperint const&)时找不到符号Hyperint::Hyperint(void)

第一个调用端口是错误号。这在搜索引擎中很容易找到,搜索引擎提供了MSDN的以下页面:

该页面描述了错误是什么,并给出了生成错误的代码类型的一些示例。此子页面描述了更接近您的问题:

更具体地说,它找不到
Hyperint::Hyperint()
的实现。在C++中,只声明它(例如在标题中为<代码> Hythin(),)是不够的,需要某个实现(代码中的代码在代码中>代码> {} /代码>),通常在相应的CPP文件中。

最后,它说它在处理
Hyperint::operator*=(类Hyperint const&)
函数时遇到了这个错误。此信息在跟踪此错误时实际上并不有用,但它可能是由以下行引起的:

Hyperint result;
它创建一个
Hyperint
对象并使用无参数构造函数初始化,即
Hyperint::Hyperint()

综上所述,您已经在标题中声明并使用了无参数构造函数
Hyperint::Hyperint()

class Hyperint
{
public:
Hyperint();    // < this line here
Hyperint(long a);
~Hyperint(void);
// ...
};

这意味着链接器正在尝试查找
Hyperint::Hyperint()
的定义,但找不到它。您需要提供它的实现

链接器错误可能会让人困惑,甚至比编译器错误更让人困惑,因为名称会变得混乱,并且您经常会丢失生成该错误的代码中的确切位置。让我们看一下您的错误消息,因为它包含您需要的所有信息,只是显示得不好。我将把重要的部分加粗

错误1错误LNK2019:未解析的外部符号“public:\u thiscall Hyperint::Hyperint(void)”(??0Hyperint@@QAE@XZ)在函数“public:class”中引用
Hyperint::Hyperint()
{
    // some code goes here, if required
}