我正在創建可以執行加法,減法,乘法和除法的多項式計算器的賦值。當我使用,只要測試操作者=函數main.cpp中,編譯器一直說:「沒有操作人的發現,其採用類型的右邊的操作數‘多項式’操作符=運算符=子類父類
以下是錯誤我接收:
下面main.cpp(61): error C2679: binary '=' : no operator found which takes a right-hand
operand of type 'Polynomial' (or there is no acceptable conversion)
c:\c++ project\comp2012_assignment_3\comp2012_assignment_3\IntegerPolynomial.h(44):
could be 'IntegerPolynomial &IntegerPolynomial::operator =(const IntegerPolynomial &)'
while trying to match the argument list '(IntegerPolynomial, Polynomial)'
是我的代碼部分:
的main.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <cmath>
#include <string>
#include "Polynomial.h"
#include "IntegerPolynomial.h"
using namespace std;
template <typename T>
T readPoly(const char* filename) {
ifstream fin(filename, ifstream::in);
T temp;
fin >> temp;
fin.close();
return (temp);
}
int main(void)
{
Polynomial a = readPoly<Polynomial>("input1.txt");
Polynomial b = readPoly<Polynomial>("input2.txt");
Polynomial d;
b.sort();
cout << "sorted b=" << b << endl;
IntegerPolynomial ia = readPoly<IntegerPolynomial>("input1.txt");
IntegerPolynomial ib = readPoly<IntegerPolynomial>("input2.txt");
int iarry[5] = {1, 3, 5, 9, 10};
IntegerPolynomial id(iarry, 5);
cout << "ia=" << ia <<endl;
cout << "ib=" << ib <<endl;
cout << "id=" << id <<endl;
d=b;
cout << "d=b=" << d << endl;
d=ib;
cout << "d=ib=" << d << endl;
id=b;
cout << "id=b=" << id << endl;
d=a-b;
return 0;
}
polynomial.h
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <list>
#include <cstdlib>
#include <cmath>
using namespace std;
class Polynomial
{
public:
Polynomial& operator=(const Polynomial& a);
protected:
std::list<Term> polyList;
};
#endif
polynomial.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <string>
#include <list>
#include "Polynomial.h"
// Assignment operator
Polynomial& Polynomial::operator=(const Polynomial& a) {
polyList.clear();
for (std::list<Term>::const_iterator a_iterator = a.polyList.begin(), end = a.polyList.end(); a_iterator != end; ++a_iterator) {
const Term curr_Term = *a_iterator;
polyList.push_back(curr_Term);
}
return *this;
}
integerpolynomial.h
#ifndef INTEGERPOLYNOMIAL_H
#define INTEGERPOLYNOMIAL_H
#include <iostream>
#include "Polynomial.h"
using namespace std;
class IntegerPolynomial : public Polynomial{
public:
// Default constructor
IntegerPolynomial();
);
#endif
integerpolynomial.cpp
#include "IntegerPolynomial.h"
using namespace std;
// Default constructor
IntegerPolynomial::IntegerPolynomial() {
}
// print the polynomial a in decreasing order of exponent
void IntegerPolynomial::print(ostream& os) const {
os << toString();
}
注:我想只包括代碼段這是關係到問題,因爲我的代碼的整個文件太長。
什麼是真正的問題,因爲在main.cpp中
d=b;
cout << "d=b=" << d << endl;
d=ib;
cout << "d=ib=" << d << endl;
工作正常。
此行出現問題。
id=b;
是否存在與函數的定義相關的問題以及解決方案。非常感謝。
這與我一直在想的很接近,但這種情況下的解決方案是什麼?我應該用帶有** IntergerPolynomial **的參數列表來重載函數嗎? – hemantai
@hemantai我編輯了答案 - 請參閱第3段。 – Angew
好的,我明白了,讓我試着去做。 – hemantai