Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

25.08.2013, 23:09. Просмотров 1047. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 23:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается переопределить операторы "+" и "=" (C++):

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

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

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

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

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

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

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

Цитата Сообщение от Демик Посмотреть сообщение
И ещё вопрос, почему оператор = переопределяется внутри структуры,а оператор "+" вне неё?
можно и оператор + определить внутри структуры, но правильная очевидная перегрузка оператора + не должна менять состояние объекта для которого она вызывается, потому лучше её сделать внешней
1
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
25.08.2013, 23:49  [ТС] #7
Все, проблему решил. я просто немного дурак = )
1
25.08.2013, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 23:49
Привет! Вот еще темы с ответами:

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

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Подскажите как перегрузить операторы ">>", "<<" и "=" - C++
Кто знает, подскажите как перегрузить операторы &quot;&gt;&gt;&quot;, &quot;&lt;&lt;&quot; и &quot;=&quot; ?

Перегрузить операторы "=", "+=" так, чтобы производилось сложение строки и объекта - C++
помогите ,пожалуйста вот задание:Реализовать класс String для работы со строками символов. Перегрузить операторы =, += так, чтобы...


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

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

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