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

возврат копии обьекта класса из метода - C++

Восстановить пароль Регистрация
 
Ingener74
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 18
06.04.2012, 22:16     возврат копии обьекта класса из метода #1
Привет всем. Есть класс ниже в нём operator+. Помогите компилятор выдаёт ворнинг

warning C4172: returning address of local variable or temporary

всё работает но этот ворнинг бесит как избавиться подскажите пожалуйста


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <typename tPointType>
struct S_Point
{
    tPointType m_oX, m_oY;
 
    S_Point( tPointType A_oX = 0, tPointType A_oY = 0 ): m_oX(A_oX), m_oY(A_oY){}
 
        .....
 
    S_Point& operator +( const S_Point& A_rPoint )
    {
        return S_Point( m_oX + A_rPoint.m_oX, m_oY + A_rPoint.m_oY );
    }
};
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.04.2012, 22:21     возврат копии обьекта класса из метода #2
А почему у вас оператор + возвращает ссылку? Это чтобы по-приколу можно было так сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
struct Foo
{
    Foo& operator +(const Foo&)
    {
        Foo f;
        return f;
    }
};
 
int main()
{
    Foo f1, f2, f3;
    (f1 + f2) = f3;
    return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.04.2012, 22:26     возврат копии обьекта класса из метода #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename tPointType>
struct S_Point
{
    tPointType m_oX, m_oY;
 
    S_Point( tPointType A_oX = 0, tPointType A_oY = 0 ): m_oX(A_oX), m_oY(A_oY){}
 
        .....
 
    const S_Point operator +( const S_Point& A_rPoint )const 
    {   
         S_Point result=*this;
         result.m_oX+=A_rPoint.m_oX
         result.m_oY+=A_rPoint.m_oY 
         return result;
    }
};
можно ещё наверное?
C++
1
friend const S_Point operator +( const S_Point& A_rPoint,   const S_Point& B_lPoint )
??
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
06.04.2012, 22:27     возврат копии обьекта класса из метода #4
soon, так можно сделать и без ссылки
Ingener74,
C++
1
const S_Point operator +( const S_Point& A_rPoint ) const;
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.04.2012, 22:30     возврат копии обьекта класса из метода #5
Цитата Сообщение от Toshkarik Посмотреть сообщение
soon, так можно сделать и без ссылки
Нужно. Возвращать ссылку на локальный объект - самоубийство.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
06.04.2012, 22:33     возврат копии обьекта класса из метода #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
soon, нет, вы не правильно поняли. В своем сообщение, как мне показалось, вы сделали акцент на записи
C++
1
( A + B ) = C;
Так можно сделать и без ссылки, передавая не константный объект А так конечно же нельзя возвращать ссылку на локальные объекты.
soon
06.04.2012, 22:44
  #7

Не по теме:

Почему же я был уверен, что так сделать не получится? Посыпаю голову пеплом...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2012, 22:45     возврат копии обьекта класса из метода
Еще ссылки по теме:

Вернуть С-строку из обьекта класса C++
C++ Возврат значения метода через указатель
C++ Возврат двух значений из метода

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

Или воспользуйтесь поиском по форуму:
Ingener74
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 18
06.04.2012, 22:45  [ТС]     возврат копии обьекта класса из метода #8
Спасибо всем с вашей помощью разобрался!!!!
Yandex
Объявления
06.04.2012, 22:45     возврат копии обьекта класса из метода
Ответ Создать тему
Опции темы

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