доступ к данным членов в Linkedlist

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;
};

0

Решение

Я полагаю, вы получаете ошибку здесь:

polynomial1->get(0)->coefficient

И (это опять-таки мое предположение) это потому, что get функция определена в базовом классе (Data) и возвращает указатель на Data (не PolynomialTerm). И конечно Data не имеет coefficient (только PolynomialTerm делает).

Компилятор не знает, что указатель возвращается get на самом деле указывает на PolynomialTerm пример. Следовательно вы получаете ошибку.

Один из способов исправить это — привести тип указателя к его фактическому типу. PolynomialTerm*:

dynamic_cast<PolynomialTerm*>(polynomial1->get(0))->coefficient
1

Другие решения

PolynomialTerm(int coefficient, Variable* variable):
coefficient(coefficient), variable(variable){}

Ваш компилятор может быть сбит с толку coefficient(coefficient),
Измените либо имя аргумента, либо имя члена:

PolynomialTerm(int coef, Variable* var):
coefficient(coef), variable(var){}
0

По вопросам рекламы [email protected]