Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
little dev
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 37
1

Возврат результата из функции через параметр по ссылке

18.10.2016, 19:40. Просмотров 557. Ответов 4
Метки нет (Все метки)

Здравствуйте уважаемый форумчане! Подскажите, как вернуть результат работы функции по ссылке? Как передавать параметр по ссылке в функцию я понял, а вот обратно не выходит. Делал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int func(int &kint) {
    kint *= 2;
    return kint;
}
int sum(int sum) {
    sum += 2;
    return kint;
}
 
void main() {
    
    int z = 1, y = 3, k;
    int& kint = k;
    k = sum((func(z) + func(y)));
    cout << z << " " << y<<" "<<k;
}
Этот код не работает. Error"значение ссылки должно быть левосторонним и LNK2019 ссылка на неразрешенный внешний символ". Объясните, как возвращать параметр по ссылке из функции. Может ли передавать параметр по ссылке void-функция?
Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2016, 19:40
Ответы с готовыми решениями:

Возврат значения через параметр функции
Пишу функцию,которая должна создавать динамическую матрицу,а затем возвращать...

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию?
Здравствуйте! Есть два варианта передачи некоторой переменной типа...

Возврат по ссылке
Вычитал давно еще, что если возвращать статический обьект из метода и присвоить...

Возврат по ссылке
Приветствую всех! Есть пример из книги Р. Лафоре &quot;Объекто-ориентированное...

Наследование, возврат по ссылке..
Есть такое :wall:Я не могу понять, как реализовать :help: ...

4
Peoples
1351 / 840 / 749
Регистрация: 06.02.2016
Сообщений: 2,243
Записей в блоге: 17
Завершенные тесты: 4
18.10.2016, 20:01 2
Типо того, но так делать не стоит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int& func(int &kint) {
    kint *= 2;
    return kint;
}
int& sum(int sum) {
    sum += 2;
    return sum;
}
 
int main() {
    
    int z = 1, y = 3, k;
    k = sum((func(z) + func(y)));  // если я не ошибаюсь, тут будет возвращаться локальная переменная, UB 
    cout << z << " " << y<<" "<<k;
}
Может сделать как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int& func(int &kint) {
    kint *= 2;
    return kint;
}
int sum(int sum) {
    sum += 2;
    return sum;
}
 
int main() {
    
    int z = 1, y = 3, k;
    k = sum((func(z) + func(y)));
    cout << z << " " << y<<" "<<k;
}
0
little dev
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 37
18.10.2016, 20:08  [ТС] 3
Спасибо, но ваш 2 код все равно выдает "Ошибка LNK2019 ссылка на неразрешенный внешний символ _WinMain@16 в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)".
0
BlackSpace
141 / 134 / 94
Регистрация: 15.03.2014
Сообщений: 283
18.10.2016, 20:14 4
little dev, Небольшой пример по ссылкам.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<iostream>
 
using namespace std;
 
// изменение внутри функции знаения переданной по ссылке переменной
void Modify( int& value );
 
// ничего не меняем ( хотя могли бы, о нам это не нужно в данном случае ), а просто возвращаем ссылку
// на одну из переданных по ссылке переменных, у которой значение больше
int& Max( int &x, int &y );
 
int main() {
 
 
    int val = 2;
    cout << "val = " << val << " ";
    // просто меняем значение переменной val внутри функции
    Modify( val );
    // продолжаем пользоваться переменной с уже изменённым значением
    cout << "val = " << val << endl;
 
 
    int x = 5, y = 6;
    cout << "x = " << x << " y = " << y << endl;
 
    // хотим обнулить максимальный элемент из двух
    Max( x, y ) = 0; // в левой части появится переменная с бОльшим значением
    // и данной переменной присвоится 0.
    cout << "x = " << x << " y = " << y << endl;
 
 
    return 0;
}
 
void Modify( int& value ) {
    value += 2;
}
 
int& Max( int &x, int &y ) {
    if ( x >= y )
        return x;
 
    return y;
}
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7078 / 3382 / 458
Регистрация: 04.12.2011
Сообщений: 9,404
Записей в блоге: 5
18.10.2016, 20:15 5
Цитата Сообщение от little dev Посмотреть сообщение
C++
1
int sum(int sum) { sum += 2; return kint; }
откуда sum знает про kint?
0
18.10.2016, 20:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2016, 20:15

Возврат значения по ссылке
Долго гуглил, но что-то так и не понял. Почему слева от знака = может...

Возврат результата вычисления
Доброго времени суток, начал изучать С++, не понимаю такую вещь, в книге...

Как происходит возврат значения по ссылке?
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат...


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

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

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