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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
#1

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

26.07.2013, 11:18. Просмотров 3330. Ответов 38
Метки нет (Все метки)

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 *&" (C++):

Исправить ошибку C2664: fcvt: невозможно преобразовать параметр из "int" в "int *" - C++
ПИшу програму перевод дробового числа с указанием количесв цифр после точки , с инт в чар !!!!Но выбивает ошибку !!! ...

Что делать с ошибкой: C2440: инициализация: невозможно преобразовать "int **" в "int *" - C++
Задание, сделать класс динамического массива шаблонным. Вот, вроде бы сделал, но наткнулся на ошибку, что не так? Код: ...

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf" - C++
Сделал многофайловую программу программу, вот она: //golf.h #include &lt;iostream&gt; #ifndef golg_h_ #define golf_h_ const int Len =...

Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? - C++
Ребят, срочно прошу вас помочь.. Есть ошибка (невозможно преобразовать аргумент 1 из &quot;unsigned int&quot; в &quot;unsigned int &quot;) как ее...

Error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>" - C++
С++ Не работает программа! Задание было такое: напишите программу invert(p,x,n), возвращающую значение х с инвертированными n-битами,...

error C2664: Display: невозможно преобразовать параметр 1 из 'int [5]' в 'int" - C++
Добрый вечер! Прошу помочь, так как сам только начал изучать СПП (поэтому отнеситесь с пониманием)). #include &lt;stdio.h&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nonedark2008
903 / 642 / 131
Регистрация: 28.07.2012
Сообщений: 1,733
26.07.2013, 12:38 #16
Цитата Сообщение от cite Посмотреть сообщение
а вот ссылка на указатель это уже сложная для меня тема
Ничего сложного. Есть указатель, есть ссылка на объект. А ссылка на указатель - это обычная ссылка, которая ссылается на объект, являющийся указателем.
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
26.07.2013, 12:40 #17
Цитата Сообщение от cite Посмотреть сообщение
ссылки и указатели немного знаю

На вот тебе еще, что еще лучше знал:

Кликните здесь для просмотра всего текста
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
45
#include <iostream> 
 
#define rus setlocale(LC_ALL,"")
#define pause system("pause");
 
 
int main()
{
rus;
 
/* Переменная состоит из двух вещей, адрес в ОП и значение хранящиеся по эту адресу, 
например: значение 2, хранящиеся по адресу 50000 */
 
int variable = 2;
std::cout << "********************\n";
std::cout << "Переменная, variable = 2\n";
std::cout << "Переменная, обращение через variable: " << variable << "\n - показывает значение хранящиеся в этой переменной\n";
std::cout << "Переменная, обращение через &variable: " << &variable << "\n - показывает адрес переменной в ОП\n\n";
 
int &link = variable;
std::cout << "********************\n";
std::cout << "Ссылка link, является ссылкой на переменную variable которая фигурировала ранее\n";
std::cout << "Ссылка, обращение через link: " <<  link << "\n - показывает значение переменной (variable), на которую ссылается данная ссылка\n";
std::cout << "Ссылка, обращение через &link: " << &link << "\n - показывает адрес переменной (variable), на которую ссылается данная ссылка\n\n";
 
/* В отличии от переменной указатель состоит из трех вещей, первая, адрес в ОП, 
в котором хранится НЕ значение, а другой адрес в ОП, в котором хранится значение, 
например: указатель pointer, указывает на адрес в ОП 60000, по которому хранится 
другой адрес - 70000, в котором непосредственно хранится значение 3,
т.е. 3 хранится по адресу 70000, а по адресу 60000 хранится адрес 70000 */
 
int *pointer = new int(3);
std::cout << "********************\n";
std::cout << "Указатель, pointer = 3\n";
std::cout << "Указатель, обращение через pointer: " <<  pointer << "\n - показывает адрес хранящийся в указателе\n";
std::cout << "Указатель, обращение через &pointer: " << &pointer << "\n - показывает адрес самого указателя\n";
std::cout << "Переменная, обращение через *pointer: " << *pointer << "\n - показывает значение хранящиеся в указателе\n\n";
 
/* PS конечно многие скажут! как?! еще есть имя (переменной, указателя ссылки) 
а так же тип хранимых данных (int, double, char), 
ну есть и есть, они в данном примере не нужны */
 
pause;
return 0;
}
nonedark2008
903 / 642 / 131
Регистрация: 28.07.2012
Сообщений: 1,733
26.07.2013, 12:46 #18
VLK, я вот прочитал, но нихрена не понял ^_^ Некоторые фразы двусмысленны...
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
26.07.2013, 12:55 #19
Цитата Сообщение от nonedark2008 Посмотреть сообщение
VLK, я вот прочитал, но нихрена не понял ^_^ Некоторые фразы двусмысленны...
Ну как можно не понять то, что ты знаешь

Добавлено через 1 минуту
А вообще скажи что именно не так, я поправлю текст, моя цель - что бы каждый мог с первого раза понять то, что я написал без вопросов.
cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 13:06  [ТС] #20
VLK, как узнать адрес в памяти где находится сама ссылка? это из вашей программы

C++
1
2
3
int &link =  variable;
std::cout << "link = " << link << std::endl;
std::cout << "&link = " << &link << std::endl; // тут будет выведен адрес переменной variable
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
26.07.2013, 13:07 #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  [ТС] #22
Цитата Сообщение от VLK Посмотреть сообщение
а зачем это надо?
но ведь ссылка где-то записана и у нее должен быть адрес как и у обычной переменной
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
26.07.2013, 13:14 #23
Цитата Сообщение от cite Посмотреть сообщение
но ведь ссылка где-то записана и у нее должен быть адрес как и у обычной переменной
Да, конечно, она записана, имеет адрес в ОП, но на сколько мне известно, узнать ее нельзя в С++, потому что толку от этого адреса нет, он ни чего не дает.

Это тоже самое что в Windows делать ярлык ярлыка.
nonedark2008
903 / 642 / 131
Регистрация: 28.07.2012
Сообщений: 1,733
26.07.2013, 13:24 #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
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
26.07.2013, 13:26 #25

Не по теме:

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



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

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

Не по теме:

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

cite
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 9
26.07.2013, 13:26  [ТС] #26
Цитата Сообщение от nonedark2008 Посмотреть сообщение
И это b нигде хранить не нужно
это что получается, что ссылка нигде не записана и не имеет адреса?
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
26.07.2013, 13:27 #27
Цитата Сообщение от cite Посмотреть сообщение
это что получается, что ссылка нигде не записана и не имеет адреса?
Ссылка имеет адрес, только знать его не к чему. Нет практического применения для этого адреса.
nonedark2008
903 / 642 / 131
Регистрация: 28.07.2012
Сообщений: 1,733
26.07.2013, 13:33 #28
Цитата Сообщение от VLK Посмотреть сообщение
могу разве что предположить, что по адресу 0x00567fed будет теперь хранится 0.1.
Верно при условии, что программа не вывалится с ошибкой доступа к памяти =)

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

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

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

Хотя может и у меня в книге не правильно записано, надо посмотреть будет что еще пишет Дейтел по этому поводу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 13:43
Привет! Вот еще темы с ответами:

Невозможно преобразовать "unsigned int" в "output::book_origin" - C++
Помогите как исправить данную проблему Серьезность Код Описание Проект Файл Строка Ошибка C2440 =: невозможно преобразовать &quot;unsigned...

Ошибка: "невозможно преобразовать 'int' в 'int [5]'" - C++
Ребят помогите не могу понять что за ошибка Пишет тип ошибка error C2440: инициализация: невозможно преобразовать 'int' в 'int ' ...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout - C++
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов- справочник телефонный, с именем и фамилией. ...

error C2664: CWnd::MessageBoxW: невозможно преобразовать параметр 2 из "long" в "LPCTSTR" - C++
при компиляции выдаёт ошибку указанную в теме, код: void Clab_12_2Dlg::OnClickedAri() { // TODO: добавьте свой код обработчика...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.07.2013, 13:43
Ответ Создать тему
Опции темы

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