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

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

Восстановить пароль Регистрация
 
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
25.08.2013, 23:09     Не получается переопределить операторы "+" и "=" #1
Всем, ещё раз, привет!
Пытаюсь переопределить операторы "+" и "=" вот так:
Это файл 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++ Заменитье буквы "a" и "o" в слове на "A" и "O".
C++ Определить, сколько в строке символов "*", ":", ";"
C++ DEV-C++ операторы ".", "::" как в VS
C++ "Классы и объекты" -"операторы"
C++ Подскажите как перегрузить операторы ">>", "<<" и "="
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 23:14     Не получается переопределить операторы "+" и "=" #2
параметр должен быть один входящий.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 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
Каратель
Эксперт C++
6542 / 3962 / 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     Не получается переопределить операторы "+" и "="
Еще ссылки по теме:

не получается передать массив из "void Vvod" в "void CalculatingEstimates" C++
C++ Переменные "емкость", "Галлон", "Бензин"
Классы "Фигура", "Прямоугольник", "Круг" C++

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

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

Текущее время: 13:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru