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

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

Войти
Регистрация
Восстановить пароль
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
#1

Функция принимает ссылку на указатель. Куча ошибок - C++

27.08.2013, 10:31. Просмотров 761. Ответов 10
Метки нет (Все метки)

Как правильно передать аргумент в функцию? Уже все способы перепробовал)

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
#include <iostream>
 
template<typename T>
void ShowVectorInfo(const T *&vector, size_t size)
{
    std::cout << "sizeof(vector) = " << sizeof(vector) << std::endl;
    std::cout << "size = " << size << std::endl << std::endl;
}
 
 
int main()
{
 
    char    arrChar[10] = {};
    int     arrInt[10] = {};
    double  arrDouble[10] = {};
    
    ShowVectorInfo(&arrChar, 10);       // error C2664: ShowVectorInfo: невозможно преобразовать параметр 1 из "char (*)[10]" в "const char (*&)[10]"
    ShowVectorInfo(arrInt, 10);     // error C2784: void ShowVectorInfo(const T *&,size_t): не удалось вывести аргумент шаблон для "const T *&" из "int [10]"
    ShowVectorInfo(&arrDouble[0], 10);   // error C2664: ShowVectorInfo: невозможно преобразовать параметр 1 из "double *" в "const double *&"
 
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 10:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция принимает ссылку на указатель. Куча ошибок (C++):

Вывести указатель - куча ошибок (недопустимое косвенное обращение, ...) - C++
Простите, туплю жестоко. Два месяца не трогал студию, забыл все конкретно. int peremennaya=5461; int Pperemennaya=*peremennaya; ...

Функция принимает указатель на void и возвращает указатель на int - C++
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Функция принимает указатель на динамический массив и возвращает его же, но без чисел полиндромов (читается с обоих сторон одинаково - 234432) - C++
Вот мое решение, подскажите, пожалуйста, что изменить, чтобы заработала программа: # include &lt;iostream&gt; # include &lt;stdlib.h&gt; #...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Функция find принимает вектор и число, которое ищется и возвращает указатель на найденное число - C++
здравствуйте. подскажите есть вот такая задача //Написать ф-цию find, которая принимает вектор и число, которое ищется. Ф-ция...

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. - C++
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции, каждая из которых принимает указатель на...

10
behemoth
44 / 30 / 7
Регистрация: 29.09.2012
Сообщений: 75
Записей в блоге: 1
27.08.2013, 10:48 #2
C++
1
void ShowVectorInfo(const T &vector, size_t size)
вот так и у меня все работает
+
C++
1
2
3
ShowVectorInfo(arrChar, 10);
ShowVectorInfo(arrInt, 10);
ShowVectorInfo(arrDouble, 10);
Добавлено через 14 минут
как вы уже заметили, наверное, sizeof выводит фиговый размер, поэтому можна вот так сделать:
1.
C++
1
std::cout << "size of array = " << sizeof(vector)/sizeof(vector[0])<< std::endl;
или
2.
C++
1
2
3
template<size_t SIZE, class T> inline size_t array_size(T (&arr)[SIZE]) {
    return SIZE;
}
вызов:
C++
1
std::cout << "size of array = " << array_size(vector)<< std::endl;
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
27.08.2013, 10:53 #3
А если так?
C++
1
ShowVectorInfo<int>( arrInt, 10 );
или
C++
1
ShowVectorInfo<int>( &arrInt[0], 10 );
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.08.2013, 11:00  [ТС] #4
Цитата Сообщение от behemoth Посмотреть сообщение
как вы уже заметили, наверное, sizeof выводит фиговый размер,
не все правильно выводит, показывает размер всего массива в байтах

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
void ShowVectorInfo(const T &vector, size_t size)
{
    std::cout << "sizeof(vector) = " << sizeof(vector) << std::endl;
    std::cout << "size = " << size << std::endl << std::endl;
}
 
int main()
{
    char    arrChar[10] = {};
    int     arrInt[10] = {};
    double  arrDouble[10] = {};
    
    ShowVectorInfo(arrChar, 10);
    ShowVectorInfo(arrInt, 10);
    ShowVectorInfo(arrDouble, 10);
благодарю за помощь. мне как раз надо было это, чтобы в в функции можно было узнать размер всего массива

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
А если так?
ошибки почему то

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
void ShowVectorInfo(const T *&vector, size_t size)
{
    std::cout << "sizeof(vector) = " << sizeof(vector) << std::endl;
    std::cout << "size = " << size << std::endl << std::endl;
}
 
int main()
{
    char    arrChar[10] = {};
    int     arrInt[10] = {};
    double  arrDouble[10] = {};
    
    ShowVectorInfo<char>(&arrChar[0], 10);      // error C2664: ShowVectorInfo: невозможно преобразовать параметр 1 из "char *" в "const char *&"
    ShowVectorInfo<int>(arrInt, 10);                // error C2664: ShowVectorInfo: невозможно преобразовать параметр 1 из "int [10]" в "const int *&"
    ShowVectorInfo<double>(arrDouble, 10);      // error C2664: ShowVectorInfo: невозможно преобразовать параметр 1 из "double [10]" в "const double *&"
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
27.08.2013, 11:12 #5
А так:
C++
1
ShowVectorInfo<char>( (const char *)&arrChar[0], 10 );
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.08.2013, 14:01  [ТС] #6
castaway, опять неправильно

но я уже понял как надо делать

если есть вот такой прототип функции (т.е. один аргумент это ссылка на указатель):
C++
1
2
template<typename T>
void ShowVectorInfo(T *&vector, size_t size);
то вызвать ее можно только с динамическим массивом
C++
1
2
3
int     *p = new int[10]();
    
ShowVectorInfo(p, 10);
а со статическим не получится

Добавлено через 1 минуту
правда в этом случае она неправильно показывает размер массива
0
zer0mail
2354 / 1984 / 198
Регистрация: 03.07.2012
Сообщений: 7,117
Записей в блоге: 1
27.08.2013, 14:09 #7
Непонятно, зачем может понадобиться ссылка на указатель (чем она лучше "просто" указателя)?
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.08.2013, 14:31  [ТС] #8
zer0mail, вот небольшой пример есть. Правда к этой теме он не имеет никакого отношения

в первом случае функция принимает ссылку на указатель, освобождает память и устанавливает указатель в NULL. В main() он тоже будет NULL

а во втором случае функция принимает просто указатель, делает то же самое, но сам указатель в main() не изменяется


C++
1
2
3
4
5
6
7
8
9
10
11
12
void F(int *&p)
{
    delete p;
    p = NULL;
}
 
int main()
{
    int     *p = new int[10]();
    F(p);
    std::cout << p << std::endl;    // 00000000
}



C++
1
2
3
4
5
6
7
8
9
10
11
12
void F(int *p)
{
    delete p;
    p = NULL;
}
 
int main()
{
    int     *p = new int[10]();
    F(p);
    std::cout << p << std::endl;    // 00344F00
}
1
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.08.2013, 16:16 #9
Цитата Сообщение от BigLow Посмотреть сообщение
вот небольшой пример есть
это пример UB.
new - delete
new[] - delete[]
это пары которые нельзя срекщивать
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.08.2013, 18:56  [ТС] #10
Jupiter, я просто из-за невнимательности забыл поставить [] )
0
Jupiter
27.08.2013, 20:01     Функция принимает ссылку на указатель. Куча ошибок
  #11

Не по теме:

Цитата Сообщение от BigLow Посмотреть сообщение
я просто из-за невнимательности забыл поставить [] )
да мы так и поняли,
На C# возможно написать такую программу, чтобы можно было просматривать закрытые профили в одноклассниках и фотографии?
куда уж тут о скобочках думать

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2013, 20:01
Привет! Вот еще темы с ответами:

Куча непонятных ошибок - C++
Вот код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; int main() { std::ifstream ifs(&quot;test.txt&quot;,...

Отладка программы, куча ошибок - C++
помогите отладить плиз вот задание Определить пользовательский класс в соответствии с вариантом задания. Определить в классе...

Куча ошибок. Как исправить? - C++
Только начал разбираться с наследованием и виртуальными функциями. Поэтому не отказался бы от некоторой помощи. Вот мой код, который...

PlaySound и куча ошибок впридачу - C++
Написал змейку , решил добавить в игру звуковые эффекты. На MSDN нашел функцию PlaySound. Подключил заголовки,подключил либу ..вот так...


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

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

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