2013-11-08 2 views
0

Я пытаюсь написать программу, которая в конечном итоге сможет иметь возможность использовать, +, -, *, /, решать, (и т.д.) многочлены. Я начинаю с простого примера, пытаясь добавить два одночлена, и будет медленно основываться на нем. Я пытаюсь перегрузить оператор +, но я получаю сообщение об ошибке:Проблема с оператором перегрузки +

error no match for 'operator+' in 'm1 + m2'

В основном я называю это, как например:

Monomial m1(2,3); 
Monomial m2(3,3); 
Monomial result; 
result = m1 + m2; // I get an error when trying to do this. 

В моем заголовке полиномиального класса у меня это определяется как:

friend Polynomial operator+ (const Monomial&, const Monomial&); 

путь я реализовал это:

Polynomial operator+(const Monomial& mono1, const Monomial& mono2){ 
    Polynomial poly; 
    poly.coef = mono1.coef + mono2.coef; // coef stands for coefficient 
    poly.exp = mono1.exp;     // exp stands for exponent 
    return poly; 
} 

* Примечание. Я просто пытаюсь сделать оператор + работать первым, прежде чем погрузиться в реальный случай разных экспонентов и т. Д. Это всего лишь простые простые вещи. Я перехожу в m1 (2,3), который равен 2x^3, m2 (3,3) равен 3x^3, который должен быть равен 5x^3, но я получаю сообщение об ошибке. Не беспокойтесь о том, чтобы напечатать результат, который у меня есть, который выдумал.

+0

Не могли бы вы отправить сообщение об ошибке * complete *? Он часто содержит намеки на то, что он ожидает, а также на близкое совпадение. –

+0

Также, как связаны «Полиномиальные» и «Мономиальные»? (Когда вы пытаетесь присвоить переменную 'Monomial' с типом' Polynomial'.) –

+0

Вы даже включили заголовочный файл класса Polynomial? –

ответ

0

Polynormial Предполагая, и Monomial не имеют никакого реального отношения, попробуйте следующее:

Monomial m1(2,3); 
Monomial m2(3,3); 
Polynomial result; 
result = m1 + m2; 
+0

Я пробовал это раньше и снова повторил это снова, однако это все равно дает мне такую ​​же ошибку. Подождите, я просто попробовал переместить функцию в класс полинома из класса одночлена, но это не решило проблему. Однако, когда я переместил реализацию выше основной, она работает отлично. Почему это? Почему я не могу реализовать его в одном из классов? Является ли моя реализация или заявление/определение неправильным? – user98289

+2

Компилятор C++ анализирует программу сверху донизу, поэтому он не знает, что существует оператор + для мономеров, если перед функцией, использующей ее, нет объявления оператора. – hjhill

0

первый, может быть ваш operator+ должен возвращать Monomial.

Но ваша проблема связана с областью C++. декларация друга прототипа распространяется до Monomial класса, и не может быть использована компилятором, когда вы последний пишет:

result = m1 + m2; 

Вам нужен опытный оператор +(), чтобы быть видимыми в этой области видимости, до вашего заявления , Итак, вы должны скопировать этот прототип и объявить его раньше (или иметь реализацию, которая появилась раньше).

Смежные вопросы