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

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

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

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

25.08.2013, 23:09. Просмотров 924. Ответов 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++ дано четырехзначное число. если сумма первых 2 цифр=сумме 2 последних, написать "yes", иначе "no"
Кто нибудь делал прогу "Эмулятор клавиш с промежутком времени между "нажатиями""? C++
C++ DEV-C++ операторы ".", "::" как в VS
C++ если не составит труда(при вводе "n" должно создаваться предложение "Мне n год (года)")
C++ "Классы и объекты" -"операторы"
C++ Как переопределить "operator <<" для cout?
При сокращении "Фамилия Имя Отчество" к "Фамилия И.О." пропадают "И.О." C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 23:14     Не получается переопределить операторы "+" и "=" #2
параметр должен быть один входящий.
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 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++
6548 / 3968 / 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++ Найти номер последней по порядку строки в матрице, содержащей наибольшее количество букв "ш", "щ"
Символьный массив: проверить, чтобы после каждого вхождения "1" шло парное вхождение "0" C++
"Неожиданный" пропуск ввода при заполнении пользователем полей в массиве объектов типа "Student" C++
Перегрузить операторы "=", "+=" так, чтобы производилось сложение строки и объекта C++

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

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

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