if (polynomial1->get(0)->compareTo(polynomial2->get(0)) == 0)
{
polynomial1->get(0)->coefficient += polynomial2->get(0)->coefficient;
result->insert_tail->polynomial1->get(0);
}
Polynomial1
а также Polynomial2
оба связаны списки, и я добавляю полиномиальные термины вместе по одному узлу за раз. В моей функции сравнения, если оба термина в связанных списках == 0, я хочу получить доступ к коэффициенту и добавить коэффициент обоих терминов вместе. Моя проблема в доступе к коэффициенту. Я продолжаю получать сообщение об ошибке:
учебный класс
Data
не имеет ни одного члена‘coefficient’
Но мой PolynomialTerm
класс наследует Data
, Любая помощь в доступе к коэффициенту?
class PolynomialTerm : public Data
{
public:
int coefficient;
Variable *variable;
PolynomialTerm(int coefficient, Variable *variable) :
coefficient(coefficient), variable(variable)
{ }
int compareTo(Data *other) const
{
PolynomialTerm * otherTerm = (PolynomialTerm*)other;
return variable->variableX == otherTerm->variable->variableX &&
variable->variableX == otherTerm->variable->variableX &&
variable->exponentX == otherTerm->variable->exponentX &&
variable->exponentY == otherTerm->variable->exponentY ? 0 :
variable->exponentX > otherTerm->variable->exponentX ||
variable->exponentY > otherTerm->variable->exponentY ? -1 : 1;
}
—редактировать—
Здесь также мой класс данных, который находится в моем заголовочном файле.
class Data {
public:
virtual ~Data() {}
/**
* Returns 0 if equal to other, -1 if < other, 1 if > other
*/
virtual int compareTo(Data * other) const = 0;
/**
* Returns a string representation of the data
*/
virtual string toString() const = 0;
};
Я полагаю, вы получаете ошибку здесь:
polynomial1->get(0)->coefficient
И (это опять-таки мое предположение) это потому, что get
функция определена в базовом классе (Data
) и возвращает указатель на Data
(не PolynomialTerm
). И конечно Data
не имеет coefficient
(только PolynomialTerm
делает).
Компилятор не знает, что указатель возвращается get
на самом деле указывает на PolynomialTerm
пример. Следовательно вы получаете ошибку.
Один из способов исправить это — привести тип указателя к его фактическому типу. PolynomialTerm*
:
dynamic_cast<PolynomialTerm*>(polynomial1->get(0))->coefficient
PolynomialTerm(int coefficient, Variable* variable):
coefficient(coefficient), variable(variable){}
Ваш компилятор может быть сбит с толку coefficient(coefficient)
,
Измените либо имя аргумента, либо имя члена:
PolynomialTerm(int coef, Variable* var):
coefficient(coef), variable(var){}