Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 289
1

Отсутствуют экземпляры шаблон функции "print", соответствующие списку аргументов

05.07.2013, 14:39. Просмотров 5414. Ответов 12
Метки нет (Все метки)

Подскажите, почему ругается на вызов функции print?

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
#include <iostream>
 
using namespace std;
 
template <class T>
void ForEach(T *begin, T *end,T f(T elem))
{
    for(; begin<end; ++begin) *begin = f(*begin);
}
template <class A>
void print(A *mas[], int n )
{
    for(int i=0;i<n;i++) cout<<*(mas[i])<<" ";
    cout<<endl;
}
int sum(int a){ return a+a;}
 
int mul(int a){ return a*a;}
 
double div2(double a){ return a/2;}
 
 
int main(int argc, char *argv[])
{
    int n = 10;
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    double b[15] = {10,20,30,4050,50,60,70,80,90,100,110,120,130,140,150};
    ForEach(a,a+10,sum);
    ForEach(b,b+15,div2);
    print(a,n);
 
 
    return 0;
}
IntelliSense: отсутствуют экземпляры шаблон функции "print", соответствующие списку аргументов типы аргументов: (int [10], int)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2013, 14:39
Ответы с готовыми решениями:

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов"
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include...

Отсутствуют экземпляры перегруженной функции "modf", соответствующие списку аргументов
в чем причина #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; int bin(double dex)...

Ошибка: E0304 отсутствуют экземпляры перегруженной функции, соответствующие списку аргументов stiff_system...
std::vector&lt;std::function&lt;double(double, double, double, double, double, double) &gt;&gt; vfunc;...

Потоки с стандарте C++ 11. Отсутствуют экземпляры конструктора, соответствующие списку аргументов
Tvector.push_back(thread(threadFunction,mas,i,3,4,76,55)); сама функция void threadFunction(int...

12
В астрале
Эксперт С++
8026 / 4783 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
05.07.2013, 14:49 2
PinkPink, Потому что вы пытаетесь принимать массив указателей, а посылаете массив элементов
1
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 793
05.07.2013, 14:54 3
Попробуйте заменить:
C++
1
2
3
4
5
6
template <class A>
void print(A *mas, int n )
{
    for(int i=0;i<n;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
2
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 289
05.07.2013, 15:06  [ТС] 4
Цитата Сообщение от 1Вирт1 Посмотреть сообщение
Попробуйте заменить:
C++
1
2
3
4
5
6
template <class A>
void print(A *mas, int n )
{
    for(int i=0;i<n;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
Да, так работает. Только доступ к элементам массива в функции тогда вот нужно делать:
C++
1
mas[i]
без разыменования.

А как ещё можно корректно передать указатель на массив и получить доступ к элементам? Есть ещё какие-то способы, кроме этого?
0
В астрале
Эксперт С++
8026 / 4783 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
05.07.2013, 15:11 5
PinkPink, А чем не понравилось
C++
1
2
3
4
5
6
template <class A>
void print(A mas[], int n )
{
    for(int i=0;i<n;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
или
C++
1
2
template<class A, int N>
void print(A (&mas)[N])
0
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 289
05.07.2013, 15:17  [ТС] 6
Цитата Сообщение от ForEveR Посмотреть сообщение
PinkPink, А чем не понравилось
C++
1
2
3
4
5
6
template <class A>
void print(A mas[], int n )
{
    for(int i=0;i<n;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
или
C++
1
2
template<class A, int N>
void print(A (&mas)[N])
Да нет, вполне всё нравится. Это для общего развития. Спасибо за информацию и объяснение.

Добавлено через 3 минуты
C++
1
2
template<class A, int N>
void print(A (&mas)[N])
А в этом случае как будет выглядеть вызов функции?
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 793
05.07.2013, 15:23 7
Вызов будет выглядеть так:
C++
1
print(a);
Но для того что бы скомпилировалось в функции нужно будет n заменить на N, то есть:
C++
1
2
3
4
5
6
template<class A, int N>
void print(A (&mas)[N])
{
    for(int i=0;i< N;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
0
12 / 10 / 0
Регистрация: 01.07.2013
Сообщений: 62
05.07.2013, 15:28 8
не понимаю, зачем так писать:
C++
1
2
3
4
5
6
template<class A, int N>
void print(A (&mas)[N])
{
    for(int i=0;i< N;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
если компилятор все равно переведет в такой вид:
C++
1
2
3
4
5
6
template <class A>
void print(A *mas, int n )
{
    for(int i=0;i<n;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
0
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 289
05.07.2013, 15:29  [ТС] 9
Цитата Сообщение от 120° Посмотреть сообщение
не понимаю, зачем так писать:


если компилятор все равно переведет в такой вид:
C++
1
2
3
4
5
6
template <class A>
void print(A *mas, int n )
{
    for(int i=0;i<n;i++) cout<<mas[i]<<" ";
    cout<<endl;
}
ну это было ради интереса)
0
В астрале
Эксперт С++
8026 / 4783 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
05.07.2013, 15:32 10
120°, Куда компилятор приведет? Зачем? Это будет шаблонная функция, которая принимает ссылку на массив. При разных N будет уже совершенно другое инстанцирование функции.

C++
1
2
3
4
template<class A, int N>
void print(A (&array)[N])
{
}
При
C++
1
2
int array[] = {1};
print(array);
Функция раскроется в
C++
1
2
3
void print (int (&array)[1])
{
}
0
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,165
Записей в блоге: 2
05.07.2013, 15:34 11
Для справки - это два разных случая.
При *mas, mas[], mas[N] передается указатель на массив, а в (&mas)[N] передается дескриптор массива!
2
12 / 10 / 0
Регистрация: 01.07.2013
Сообщений: 62
05.07.2013, 15:44 12
Цитата Сообщение от ForEveR Посмотреть сообщение
Куда компилятор приведет? Зачем?
я немного не так выразился. имею ввиду если заголовок функции будет таким:
C++
1
void print(A mas[], int n ); // квадратные скобки
то в результате получится:
C++
1
void print(A *mas, int n );
Добавлено через 7 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
а в (&mas)[N] передается дескриптор массива!
не объясните что такое дескриптор? я так понимаю что это ссылка? спасибо...
0
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,165
Записей в блоге: 2
05.07.2013, 15:52 13
120°, Для массивов создактся дескриптор, в котором содержаться такие данные, как размер массива, адрес первого элемента и т.д. Врядли он присутствует в скомпилированном коде, но он имеет значение во время компиляции.
Когда передается указатель на первый элемент массива, все данные теряются, ибо указатель их не содержит.
Когда мы передаем ссылку на массив, то функция в конечном итоге, скорее всего, будет получать указатель на начало массива, но для компилятора будет присутствовать и дескриптор. Можете проверить для обоих случаев размер переданного с помощью sizeof. С указателем покажет размер указателя, с ссылкой - размер массива, следовательно имеем уже не просто указатель, а именно массив, как данное
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2013, 15:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Потоки. Ошибка отсутствуют экземпляры конструктора, соответствующие списку аргументов
void Engine::run() { long startTime; long timeMillis; long waitTime; long totalTime =...

Специализации. Отсутствуют экземпляры шаблон функции, соответствующие заданному типу
Изучаю С++ по книге Стивена Прата, там есть задача: &quot;Создайте шаблон функции maxn () , которая...

Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон"
Есть класс бинарного дерева, в нем структура. Класс - Tree, структура - list(листик, а не список)....

Ошибка: отсутствуют экземпляры шаблон функции
Всем доброго времени суток. Решил отработать на практике алгоритм быстрой сортировки и столкнулся...


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

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

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