Хотя на ваш вопрос уже был получен достаточно хороший ответ, я думаю, стоит упомянуть еще один момент о вашем коде. Прямо сейчас у вас есть следующие объявления:
class frag
{
public:
frag myfunc (frag oper1,
frag oper2);
frag myfunc2 (frag oper1,
frag oper2);
... и у вас есть следующие функции:
frag myfunc (frag oper1, frag oper2)
{
return oper1 + -oper2;
}
frag myfunc2 (frag oper1, frag oper2)
{
return oper1 + oper2;
}
Я предполагаю, что вы предполагали, что эти две функции реализуют функции-члены, которые вы объявили в frag
- но они этого не делают. Вместо этого у вас есть две функции-члена, которые объявлены никогда не определенными, и эти две глобальные функции имеют одинаковые имена. Чтобы они были функциями-членами, которые вы объявили, вам нужно изменить объявление на что-то вроде:
frag frag::myfunc(frag oper1, frag oper2) {
return oper1 + -oper2;
}
frag frag::myfunc2(frag oper1, frag oper2) {
return oper1 + oper2;
}
С другой стороны, они на самом деле тоже не имеют никакого смысла в этом смысле - в частности, в качестве функций-членов они обычно вызываются как-то так: a.myfunc(b,c);
Они оба действительно написаны как глобальные функции хотя - в качестве функций-членов они обычно принимают только один параметр и используют this
в качестве первого параметра:
frag frag::myfunc1(frag oper) {
return *this + -oper;
}
frag frag::myfunc2(frag oper) {
return *this + oper;
}
Конечно, это может быть просто случайный побочный эффект от попытки уменьшить исходный код до минимума, необходимого для публикации. Если это так, пожалуйста, не стесняйтесь игнорировать весь этот "ответ" ....