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

невозможно преобразовать параметр 1 из "int" в "int *&" - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 11:18     невозможно преобразовать параметр 1 из "int" в "int *&" #1
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
#include <iostream>
using namespace std;
 
void Func1(int *n)
{
    cout << *n << " = " << *n << endl;
}
 
void Func2(int &n)
{
    cout << &n << " = " << n << endl;
}
 
void Func3(int *&n)
{
    cout << &n << " = " << n << endl;
}
 
 
int main()
{
    int n;
 
    Func1(&n);
    Func2(n);
    Func3(n);  // Func3: невозможно преобразовать параметр 1 из "int" в "int *&"
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2013, 11:18     невозможно преобразовать параметр 1 из "int" в "int *&"
Посмотрите здесь:

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" C++
error C2664: Display: невозможно преобразовать параметр 1 из 'int [5]' в 'int" C++
невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR" C++
C++ Что делать с ошибкой: C2440: инициализация: невозможно преобразовать "int **" в "int *"
error C2664: CWnd::MessageBoxW: невозможно преобразовать параметр 2 из "long" в "LPCTSTR" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
26.07.2013, 13:07     невозможно преобразовать параметр 1 из "int" в "int *&" #21
Цитата Сообщение от cite Посмотреть сообщение
VLK, как узнать адрес в памяти где находится сама ссылка? это из вашей программы

C++
1
2
3
int &link=variable;
std::cout << "link = " << link << std::endl;
std::cout << "&link = " << &link << std::endl; // тут будет выведен адрес переменной variable
ни как, как было написано в моей книге "а зачем это надо?".

Короче адрес самой ссылки знать ни к чему, он не нужен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 13:12  [ТС]     невозможно преобразовать параметр 1 из "int" в "int *&" #22
Цитата Сообщение от VLK Посмотреть сообщение
а зачем это надо?
но ведь ссылка где-то записана и у нее должен быть адрес как и у обычной переменной
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
26.07.2013, 13:14     невозможно преобразовать параметр 1 из "int" в "int *&" #23
Цитата Сообщение от cite Посмотреть сообщение
но ведь ссылка где-то записана и у нее должен быть адрес как и у обычной переменной
Да, конечно, она записана, имеет адрес в ОП, но на сколько мне известно, узнать ее нельзя в С++, потому что толку от этого адреса нет, он ни чего не дает.

Это тоже самое что в Windows делать ярлык ярлыка.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
26.07.2013, 13:24     невозможно преобразовать параметр 1 из "int" в "int *&" #24
Цитата Сообщение от VLK Посмотреть сообщение
А вообще скажи что именно не так, я поправлю текст
Сложно объяснить это. Про ОП по-моему зря вообще написано, для понимания это вообще не нужно.
Переменная от указателя практически ничем не отличаются. int a; - объект, который хранит в себе число. int *pa; - объект который хранит в себе адрес(тоже число). Единственное - это то, что объект с типом указателя поддерживает операцию разыменования, т.е. обращение по адресу, который хранится в переменной.
Я тоже плохо написал, но понимание всего этого приходит с практикой.
Например, многие студенты с их нанием курса вообще не смогут понять такое:
C++
1
2
unsigned int a = 0x00567fed;
*(double *)a = 0.1;
Добавлено через 4 минуты
Цитата Сообщение от cite Посмотреть сообщение
но ведь ссылка где-то записана и у нее должен быть адрес как и у обычной переменной
Использование ссылки можно сравнить с использованием переменной, но под другим именем.
Если есть у нас переменная int a; и есть ссылка на нее int &b = a; Это можно перефразировать как: пусть к переменной a будет можно обращаться по имени b. И это b нигде хранить не нужно, так как b это и есть переменная a, просто под другим именем. Если везде вместо b, подставить a, то ничего не изменится.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от VLK Посмотреть сообщение
Это тоже самое что в Windows делать ярлык ярлыка.
Винда не дает делать ярлык ярлыка T_T

VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
26.07.2013, 13:26     невозможно преобразовать параметр 1 из "int" в "int *&" #25

Не по теме:

Ну есть 2 типа объяснения, научный и колхозный.
Колхозный (на пальцах) проще для понимания, я считаю что лучше сначала объяснить по колхозному, что бы человек понял как именно это работает, а потом уже пусть зная о чем идет речь повторит с научной точки.



Цитата Сообщение от nonedark2008 Посмотреть сообщение
Например, многие студенты с их нанием курса вообще не смогут понять такое:
Я честно сказать тоже не понимаю могу разве что предположить, что по адресу 0x00567fed будет теперь хранится 0.1.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Винда не дает делать ярлык ярлыка T_T
ну наверное из тех же соображений что нельзя узнать адрес ссылки.

cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 13:26  [ТС]     невозможно преобразовать параметр 1 из "int" в "int *&" #26
Цитата Сообщение от nonedark2008 Посмотреть сообщение
И это b нигде хранить не нужно
это что получается, что ссылка нигде не записана и не имеет адреса?
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
26.07.2013, 13:27     невозможно преобразовать параметр 1 из "int" в "int *&" #27
Цитата Сообщение от cite Посмотреть сообщение
это что получается, что ссылка нигде не записана и не имеет адреса?
Ссылка имеет адрес, только знать его не к чему. Нет практического применения для этого адреса.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
26.07.2013, 13:33     невозможно преобразовать параметр 1 из "int" в "int *&" #28
Цитата Сообщение от VLK Посмотреть сообщение
могу разве что предположить, что по адресу 0x00567fed будет теперь хранится 0.1.
Верно при условии, что программа не вывалится с ошибкой доступа к памяти =)

Добавлено через 5 минут
Цитата Сообщение от VLK Посмотреть сообщение
Ссылка имеет адрес
Нет не имеет.
Вот есть у нас int a; и int &b = a;
Под a у нас в стеке выделится 4 байта, но под b выделяться ничего не будет.
Ссылки обрабатываются на этапе компиляции, тогда если по тупому - все использования b будут заменены на использование переменной a. Т.е. везде вместо b подставится a. В скомпилированной программе b уже фигурировать не будет.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
26.07.2013, 13:36     невозможно преобразовать параметр 1 из "int" в "int *&" #29
Цитата Сообщение от cite Посмотреть сообщение
это что получается, что ссылка нигде не записана и не имеет адреса?
Да. Создание ссылки не ведет к созданию новой переменной (не выделяется память под новый объект). Ссылка - это синоним (альтернативное имя) для уже существующего объекта.

Термин "ссылка" имеет значение только в контексте исходного кода программы. В машинном коде никаких ссылок не существует. (А вот указатели - существуют.)
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
26.07.2013, 13:43     невозможно преобразовать параметр 1 из "int" в "int *&" #30
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Нет не имеет.
Не знаю, не знаю, вот у меня в книге было написано - невозможно преобразовать параметр 1 из "int" в "int *&"

А если написано что нельзя, это значит что он (адрес) есть, да и как то не логически, адрес на который ссылается ссылка должен быть где то записан в памяти, а точнее по какому то адресу, ну не может же быть так, что данные есть, а места это не занимает.

Хотя может и у меня в книге не правильно записано, надо посмотреть будет что еще пишет Дейтел по этому поводу.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
26.07.2013, 13:50     невозможно преобразовать параметр 1 из "int" в "int *&" #31
Ссылка это лишь обертка над указателем. Если есть возможность проставить вместо ссылки саму переменную, то компилятор так и сделает.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
26.07.2013, 13:53     невозможно преобразовать параметр 1 из "int" в "int *&" #32
VLK, опять же, под ссылку памяти в стеке не выделяется, поэтому у нее самой нет адреса(она нигде не хранится).
В примере с картинки просто при компиляции программы вместо ссылки была подставлена переменная на которую она ссылалась, поэтому адреса получились одинаковые - происходило получение адреса одной и той же переменной. Опять же учебники подносят информацию на более простом языке, поэтому там допускаются неточности.
Чтобы в точности определить что есть что на самом деле, нужно прочитать документацию по стандарту языка.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
26.07.2013, 13:57     невозможно преобразовать параметр 1 из "int" в "int *&" #33
Нннууу...... при всем уважении к Дейтелу..... Наиболее Авторитетный Источник утверждает следующее:
1. Указатель на ссылку не существует,
2. Должна ли ссылка "храниться" где-либо в памяти (т.е. иметь физический адрес) - не определено.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
26.07.2013, 14:13     невозможно преобразовать параметр 1 из "int" в "int *&" #34
Ну вообщ указатель на ссылку по сути указатель на константый указатель( & = const *), смысл получать адрес константы. Вы её всеравно не измените...
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
26.07.2013, 16:41     невозможно преобразовать параметр 1 из "int" в "int *&" #35
C++
1
2
3
4
5
6
7
8
void Func3(int * const & n)
{
    cout << n << " = " << *n << endl;
}
 
//....
 
Func3(&n);
cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 17:14  [ТС]     невозможно преобразовать параметр 1 из "int" в "int *&" #36
Цитата Сообщение от Schizorb Посмотреть сообщение
void Func3(int * const & n)
как расшифровывается эта запись? константная ссылка на константный указатель?

Добавлено через 5 минут
и почему const и int стоят в таком порядке? обычно пишут const int
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
26.07.2013, 17:26     невозможно преобразовать параметр 1 из "int" в "int *&" #37
cite, это ссылка на константный указатель на переменную типа int.

Добавлено через 8 минут
int * const & - ссылка на константный указатель на переменную типа int
int const *& - ссылка на указатель на константную переменную типа int
const int *& - константная ссылка на указатель на переменную типа int

Кажется так, если точнее.
cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 17:28  [ТС]     невозможно преобразовать параметр 1 из "int" в "int *&" #38
посоветуйте хорошую книгу или ссылку на сайт где можно почитать вот про такие конструкции. чтобы понять как правильно их читать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 17:29     невозможно преобразовать параметр 1 из "int" в "int *&"
Еще ссылки по теме:

C++ Error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
C++ Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
26.07.2013, 17:29     невозможно преобразовать параметр 1 из "int" в "int *&" #39
Цитата Сообщение от nonedark2008 Посмотреть сообщение
const int *&
Тоже самое, что и int const *&.

Добавлено через 19 секунд
Цитата Сообщение от nonedark2008 Посмотреть сообщение
константная ссылка
Ссылки всегда константны
Yandex
Объявления
26.07.2013, 17:29     невозможно преобразовать параметр 1 из "int" в "int *&"
Ответ Создать тему
Опции темы

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