Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
#1

Не получается переопределить операторы "+" и "=" - C++

25.08.2013, 23:09. Просмотров 987. Ответов 6
Метки нет (Все метки)

Всем, ещё раз, привет!
Пытаюсь переопределить операторы "+" и "=" вот так:
Это файл MyVector2D.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
MyVector2D& operator/=(MyVector2D &a, const MyVector2D &b)
{
    a.x = b.x;
    a.y = b.y;
    return a;
}
 
MyVector2D operator+(const MyVector2D &a, const MyVector2D &b)
{
    MyVector2D c;
    c.x = a.x + b.x;
    c.y = a.y + b.y;
    return c;
}
А это файл MyVector2D.h

C++
1
2
3
4
5
6
7
8
9
struct MyVector2D 
{
    float x, y;
    MyVector2D():x(0),y(0){}
    MyVector2D(float x, float y):x(x),y(y){}
    MyVector2D(const MyVector2D &r):x(r.x),y(r.y){}
    MyVector2D& operator/=(MyVector2D &a, const MyVector2D &b);
    MyVector2D operator+(const MyVector2D &a, const float &b);
};
И пытаюсь использовать их так:

C++
1
2
MyVector2D a(50,100), b(50,100), c(0,0);
c=a+b;
Но выскакивают такие ошибки:
my_Object.cpp
error C2804: бинарный "operator /=" имеет слишком много параметров
error C2804: бинарный "operator +" имеет слишком много параметров
main.cpp
error C2804: бинарный "operator /=" имеет слишком много параметров
error C2804: бинарный "operator +" имеет слишком много параметров
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
error C2371: c: переопределение; различные базовые типы
main.cpp(7): см. объявление "c"
error C2676: бинарный "+": "MyVector2D" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
cTGA.cpp
error C2804: бинарный "operator /=" имеет слишком много параметров
error C2804: бинарный "operator +" имеет слишком много параметров

и т.д.
Как быть и что делать? Я как бы понимаю, что переопределяю не так, но как исправить это дело, не знаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 23:09     Не получается переопределить операторы "+" и "="
Посмотрите здесь:
Перегрузить операторы "=", "+=" так, чтобы производилось сложение строки и объекта C++
C++ "Классы и объекты" -"операторы"
C++ DEV-C++ операторы ".", "::" как в VS
C++ Как переопределить "operator <<" для cout?
ткните мордой плз на описание конструкций типа defect?"brak":"goden" C++
C++ Превратить заданную пользователем дату в формате "дд.мм.гг" в формат "месяц дд. год"
C++ Написать функцию выбора пунктов меню стрелками "вверх" "вниз"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 23:14     Не получается переопределить операторы "+" и "=" #2
параметр должен быть один входящий.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2013, 23:20     Не получается переопределить операторы "+" и "=" #3
C++
1
2
3
4
5
6
7
8
9
10
11
//MyVector2D.h
struct MyVector2D 
{
    float x, y;
    MyVector2D():x(0),y(0){}
    MyVector2D(float x, float y):x(x),y(y){}
    MyVector2D(const MyVector2D &r):x(r.x),y(r.y){}
    MyVector2D& operator/=(const MyVector2D & b);
};
 
MyVector2D operator+(const MyVector2D &a, const MyVector2D &b);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//MyVector2D.cpp
...
MyVector2D& MyVector2D::operator /= (const MyVector2D& b)
{
    a.x = b.x;
    a.y = b.y;
    return *this;
}
 
MyVector2D operator + (const MyVector2D &a, const MyVector2D &b);
{
    return MyVector2D(a.x + b.x, a.y + b.y);
}
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
25.08.2013, 23:39  [ТС]     Не получается переопределить операторы "+" и "=" #4
Вот тут
C++
1
2
3
4
5
6
7
8
//MyVector2D.cpp
...
MyVector2D& MyVector2D::operator /= (const MyVector2D& b)
{
    a.x = b.x;
    a.y = b.y;
    return *this;
}
Может быть нужно так?
C++
1
2
3
4
5
6
7
8
//MyVector2D.cpp
...
MyVector2D& MyVector2D::operator /= (const MyVector2D& b)
{
    x = b.x;
    y = b.y;
    return *this;
}
И ещё вопрос, почему оператор = переопределяется внутри структуры,а оператор "+" вне неё?
Теперь такие ошибки:
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
error C2371: c: переопределение; различные базовые типы
main.cpp(7): см. объявление "c"
error C2440: инициализация: невозможно преобразовать "MyVector2D" в "int"

Хотя ни на каком этапе преобразование в int не происходит, странно.
1>
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 23:42     Не получается переопределить операторы "+" и "=" #5
И еще почему оператор /=, если говорилось о =. И вообще с такими внутренностями определять оператор = не нужно, компилятор автоматом такой создаст.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2013, 23:47     Не получается переопределить операторы "+" и "=" #6
Цитата Сообщение от Демик Посмотреть сообщение
Может быть нужно так?
да, верно

Цитата Сообщение от Демик Посмотреть сообщение
И ещё вопрос, почему оператор = переопределяется внутри структуры,а оператор "+" вне неё?
можно и оператор + определить внутри структуры, но правильная очевидная перегрузка оператора + не должна менять состояние объекта для которого она вызывается, потому лучше её сделать внешней
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 23:49     Не получается переопределить операторы "+" и "="
Еще ссылки по теме:
Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include C++
C++ Выяснить, имеется ли пара соседствующих символов ",-" "-," (запятая, тире) в тексте
Удалить из двусвязного списка все элементы до первого "*" и после последнего "*" C++
C++ Удалять в словах, которые заканчиваются на букву "А" все другие буквы "А"
"Красный Тигр" vs. "Желтый Заяц". А каким будет 3005 год? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
25.08.2013, 23:49  [ТС]     Не получается переопределить операторы "+" и "=" #7
Все, проблему решил. я просто немного дурак = )
Yandex
Объявления
25.08.2013, 23:49     Не получается переопределить операторы "+" и "="
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru