映射和节点,错误智能感知:不存在从"const std::pair<const int, double>"到"Node"的合适用户定义转换
Map and Node, error IntelliSense: no suitable user-defined conversion from "const std::pair<const int, double>" to "Node" exists
我写这段代码是为了使用映射和节点读取和添加多项式。
错误发生在operator+中。我知道我没有将我的映射与Node相关的代码,我认为我应该在"std::map PolynomialMap"中使用一些东西;类似于列表,但我不确定是什么。或者我应该完全改变我的代码并使用另一种方法?如果不够好,请让我知道如何改进我的问题
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <vector>
#include <map>
using namespace std;
typedef struct Node
{
double cof; // coefficient
int deg; // degree
} Node; // the node of polynomial
class CPolynomial
{
private:
std::map<int, double> PolynomialMap;
public:
CPolynomial();
CPolynomial(const string& file);
virtual ~CPolynomial();
CPolynomial operator+(const CPolynomial &right);
CPolynomial& operator=(const CPolynomial &right);
private:
void AddOneTerm(Node term); // add one term into m_Polynomial
};
int main()
{
CPolynomial p1("P3.txt");
CPolynomial p2("P4.txt");
CPolynomial p3;
p3 = p1 + p2;
return 0;
}
CPolynomial::CPolynomial()
{
;
}
CPolynomial::CPolynomial(const string& file)
{
Node term;
fstream MyFile;
string p;
int num;
MyFile.open(file);
if (!MyFile.is_open())
{
cerr << "Unable to open input file" << endl;
exit(EXIT_FAILURE);
}
else
{
MyFile >> p >> num;
map <int, double>::iterator it = PolynomialMap.begin();
for (int i = 0; i < num; i++)
{
MyFile >> term.deg >> term.cof;
AddOneTerm(term);
}
MyFile.close();
}
}
CPolynomial CPolynomial:: operator+(const CPolynomial &right)
{
CPolynomial temp_polynomial;
temp_polynomial.PolynomialMap = PolynomialMap;
map <int, double> ::const_iterator it; it = right.PolynomialMap.begin();
for (; it != right.PolynomialMap.end(); ++it) //
{
AddOneTerm(*it); //error C2664: 'void CPolynomial::AddOneTerm(Node)' : cannot convert argument 1 from 'const std::pair<const _Kty,_Ty>' to 'Node'
//IntelliSense: no suitable user-defined conversion from "const std::pair<const int, double>" to "Node" exists
}
map <int, double> sum_result = PolynomialMap;
PolynomialMap = temp_polynomial.PolynomialMap;
temp_polynomial.PolynomialMap = sum_result;
sum_result.clear();
return temp_polynomial;
}
CPolynomial& CPolynomial:: operator=(const CPolynomial &right)
{
this->PolynomialMap = right.PolynomialMap;
return *this;
}
void CPolynomial::AddOneTerm(Node term)
{
auto it = PolynomialMap.begin();
while (it != PolynomialMap.end() && it->first < term.deg)
{
++it;
}
if (it != PolynomialMap.end() && term.deg == it->first)
{
it->second += term.cof;
}
else
{
PolynomialMap.insert(pair<int, double>(term.deg, term.cof));
}
}
CPolynomial::~CPolynomial()
{
PolynomialMap.clear();
}
问题是,您已经编写了AddOneTerm
方法,以期望一个参数是Node
结构,但在operator+
方法中,您正试图向它传递一个参数,即const std::pair<const int, double>
。
有多种方法可以解决这个问题。以下代码通过在Node类中提供一个构造函数来修改代码以解决问题,该构造函数可以将const std::pair<const int, double>
转换为Node
。还需要添加无参数构造函数,因为在通过读取文件构造多项式时,您使用的是Node
的隐式无参数构造函数。
typedef struct Node
{
double cof; // coefficient
int deg; // degree
Node()
{
deg = 0;
cof = 0.0;
}
Node(const pair<const int, double> & nodePair)
{
deg = nodePair.first;
cof = nodePair.second;
}
} Node; // the node of polynomial
相关文章:
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 使用 const double* const 作为模板参数 - 代码性能问题
- 如何为const char double指针(使用新的)动态分配内存
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- 是否可以输入到const double数组
- 错误:将"const double"绑定到类型为"double&"的引用会丢弃限定符
- C++ const double pointer
- SWIG - 如何使用采用'const double*'的构造函数将类包装为 python
- 类型为"double" snd const char [3]' 到二进制'operator<<'的无效操作数
- 'double' 和 'const char [2]' 到二进制"运算符!="的无效操作数|
- 从const doubles的指针返回指向double的指针
- 了解错误"error: cannot convert ‘char**’ to ‘const char*’ for argument ‘1’ to ‘double atof(const char*)’"
- 将“const”作为“const double”的“this”参数传递时出错,将丢弃限定符
- C++如何处理 const double&引用 int?
- 将"const"与标量类型一起使用的好处?(例如 "const double"或"const int")
- 哪个更好#define PI还是const double PI
- GCC错误:从double*到const double的转换无效
- 重载的'qHash(const double&)'的调用是不明确的
- 将const double[][]数组作为参数传递给double**接口
- 调用"事件:<float>:通知(NULL, const double&)"没有匹配函数|