9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
1

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

25.08.2013, 23:09. Показов 1413. Ответов 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 +" имеет слишком много параметров

и т.д.
Как быть и что делать? Я как бы понимаю, что переопределяю не так, но как исправить это дело, не знаю.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2013, 23:09
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло",...

Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective")
Данный код должен выводить на экран кубик который должен вращаться, но возникла проблема. Для...

Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective")
Этот код должен выводить на экран кубик, который по идее должен вращаться, но возникла проблема:...

Зачем перегружать операторы "++", "<<", ">>" и что они дают?
Здравствуйте. Я хотел спросить зачем перегружать оператор &quot;++&quot;, &quot;&lt;&lt;&quot;, &quot;&gt;&gt;&quot; и что они нам дают?

6
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 23:14 2
параметр должен быть один входящий.
0
Каратель
Эксперт С++
6605 / 4024 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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);
}
1
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>
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 23:42 5
И еще почему оператор /=, если говорилось о =. И вообще с такими внутренностями определять оператор = не нужно, компилятор автоматом такой создаст.
0
Каратель
Эксперт С++
6605 / 4024 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.08.2013, 23:47 6
Цитата Сообщение от Демик Посмотреть сообщение
Может быть нужно так?
да, верно

Цитата Сообщение от Демик Посмотреть сообщение
И ещё вопрос, почему оператор = переопределяется внутри структуры,а оператор "+" вне неё?
можно и оператор + определить внутри структуры, но правильная очевидная перегрузка оператора + не должна менять состояние объекта для которого она вызывается, потому лучше её сделать внешней
1
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
25.08.2013, 23:49  [ТС] 7
Все, проблему решил. я просто немного дурак = )
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2013, 23:49
Помогаю со студенческими работами здесь

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru