С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
#1

Ошибка, не знаю как исправить - C++

17.11.2009, 20:12. Просмотров 810. Ответов 6
Метки нет (Все метки)

Добрый вечер всем!!

У меня возник небольшой вопрос по поводу моей программы... Мне необходимо протестировать различные методы сортировки на количество сравнений, обменов и время выполнения... Интерфейс программы необходимо написать с помощью Winapi... Все уже вроде почти готово...

Вот собственно проблемма: Я решил написать функцию, которой в качестве параметра передаётся функция сортировки... И необходимые параметры... Внутри это функция вызывает функцию сортировки и замеряет время работы этой функции, но появляются некоторые ошибки... Если кто знает почему пожалуйста подскажите... Весь код программы приводить не буду... Вот собственно функция на которой возникает ошибка:

Её шаблон:
C++
1
2
template <typename T> bool Sort(void (*funcSort)(T *, long, long *, long *), 
                                T * A, long n, long * com, long * exc, long * time);
Её определение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename T> bool Sort(void (*funcSort)(T *, long, long *, long *), 
                                T * A, long n, long * com, long * exc, long * time)
{
    LARGE_INTEGER freq, t1, t2;
    if(QueryPerformanceFrequency(&freq))
    {
        QueryPerformanceCounter(&t1);
        (*funcSort)(A, n, com, exc);
        QueryPerformanceCounter(&t2);
        time = 1000 * (t2.QuadPart - t1.QuadPart) / freq.QuadPart;
        return true;
    }
    else
    {
        return false;
    }
}
А ошибки возникают при её вызове:
C++
1
Sort(MergeSort, A, N, &com, &exc, &timet);
Собственно ошибки:
Error 1 error C2896: 'bool Sort(void (__cdecl *)(T *,long,long *,long *),T *,long,long *,long *,long *)' : cannot use function template 'void HeapSort(T *,long,long *,long *)' as a function argument c:\documents and settings\joker\мои документы\visual studio 2005\projects\sss\sss\main.cpp 28
Error 2 error C2784: 'bool Sort(void (__cdecl *)(T *,long,long *,long *),T *,long,long *,long *,long *)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' c:\documents and settings\joker\мои документы\visual studio 2005\projects\sss\sss\main.cpp 28

Кто знает, помогите пожалуйста!!!

Добавлено через 1 час 17 минут
Help
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2009, 20:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка, не знаю как исправить (C++):

Ошибка при перегрузке оператора, не знаю как исправить - C++
#pragma once #include &lt;iostream&gt; #include &lt;vector&gt; #define innerVectorType std::vector&lt;T&gt; template &lt;class T&gt; class Matrix ...

Не знаю как исправить ошибку - C++
при выводе всего списка не выдает верную информацию. Не могу понять что не так, помогите. Заранее спасибо. #include &lt;stdio.h&gt; ...

Не знаю как исправить ошибку - C++
Всем привет! В общем делал задание на перегрузку операторов, вот код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

Работа со структурой, не знаю как исправить - C++
помогите пожалуйста есть структура и массив структуры надо данные массива передать в функцию помогите исправить ошибки, в работе со...

Error LNK2019 не знаю как исправить - C++
Всем привет! Решаю уравнение Фредгольма второго рода методом Галеркина. Если рассматривать вещественнозначный случай, то все работает...

Много ошибок и не знаю , как исправить - C++
Вот они &lt; для вложений используйте встроенные возможности форума /&gt; , а вот сам код программы. Объясните в чём проблема и , как её...

6
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
17.11.2009, 20:32 #2
Набрось минимальный нерабочий пример. У меня так работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <typename T> bool Sort(void (*funcSort)(T*, long, long*), T * A, long n, long *cmp){
  (*funcSort)(A, n, cmp);
  return true;
}
 
template <typename T>
void foo(T *arr, long, long*){
  T i = arr[0];
}
int main(){
  int arr[] = {1,0};
  long cmp;
  Sort(foo, arr, 10, &cmp);
}
0
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
17.11.2009, 20:43  [ТС] #3
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
 
template <typename T> void CountingSort(T *A, long n, long * comperisons, long * exchanges);
template <typename T> bool Sort(void (*funcSort)(T *, long, long *, long *), 
                                T * A, long n, long * com, long * exc, long * time);
 
void main(void)
{
    srand((unsigned) time(NULL));
    long N = 100000;
    long * A = new long[N];
    long com = 0;
    long exc = 0;
    long timet = 0;
    for(int i = 0; i < N; i++)
    {
        A[i] = rand()%100000;
    }
    Sort(CountingSort, A, N, &com, &exc, &timet);
    cout << com << "   " << exc << "   " << time;
}
 
template <typename T> void CountingSort (T *A, long n, long * comperisons, long * exchanges)
{
    T max = A[0];
    T min = A[0];
    for(int i = 0; i < n; i++)
    {
        if(A[i] > max) 
        {
            (*comperisons)++;
            max = A[i];
        }
        if(A[i] < min)
        {
            (*comperisons)++;
            min = A[i];
        }
    }
    int i, j; 
    T c;
    T *B = (T *)calloc(max - min + 1, sizeof(T));
    for (i = 0; i < n; i++) 
        ++B[A[i] - min];
    for (j = min; j <= max; ++j)
    {
        c = B[j - min];
        while (c > 0)
        {
            *A = j; 
            ++A; 
            --c;
        }
    }
    free(B);
}
 
template <typename T> bool Sort(void (*funcSort)(T *, long, long *, long *), 
                                T * A, long n, long * com, long * exc, long * time)
{
    LARGE_INTEGER freq, t1, t2;
    if(QueryPerformanceFrequency(&freq))
    {
        QueryPerformanceCounter(&t1);
        (*funcSort)(A, n, com, exc);
        QueryPerformanceCounter(&t2);
        time = 1000 * (t2.QuadPart - t1.QuadPart) / freq.QuadPart;
        return true;
    }
    else
    {
        return false;
    }
}
Вот например...
Если не знаете решения, хоть подскажите в связи с чем могут возникнуть эти ошибки...
0
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
17.11.2009, 20:51 #4
Какой у вас компилятор? здесь код без ошибок компелится http://codepad.org/MDXJCtHz
0
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
17.11.2009, 20:54  [ТС] #5
Visual Studio 2005 года... Странно, но что означают эти ошибки?
0
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
17.11.2009, 21:00 #6
Ну так попробуйте
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
//#include <windows.h>
//#include <time.h>
//#include <stdlib.h>
 
using namespace std;
 
template <typename T> void CountingSort(T *A, long n, long * comperisons, long * exchanges);
template <typename T, typename Func> bool Sort(Func funcSort, 
   T * A, long n, long * com, long * exc, long * time);
 
int main(void)
{
       // srand((unsigned) time(NULL));
        long N = 100000;
        long * A = new long[N];
        long com = 0;
        long exc = 0;
        long timet = 0;
        for(int i = 0; i < N; i++)
        {
                A[i] = i;//rand()%100000;
        }
        Sort(CountingSort<long>, A, N, &com, &exc, &timet);
        cout << com << "   " << exc << "   ";// << time;
}
 
template <typename T> void CountingSort (T *A, long n, long * comperisons, long * exchanges)
{
        T max = A[0];
        T min = A[0];
        for(int i = 0; i < n; i++)
        {
                if(A[i] > max) 
                {
                        (*comperisons)++;
                        max = A[i];
                }
                if(A[i] < min)
                {
                        (*comperisons)++;
                        min = A[i];
                }
        }
        int i, j; 
        T c;
        T *B = (T *)calloc(max - min + 1, sizeof(T));
        for (i = 0; i < n; i++) 
                ++B[A[i] - min];
        for (j = min; j <= max; ++j)
        {
                c = B[j - min];
                while (c > 0)
                {
                        *A = j; 
                        ++A; 
                        --c;
                }
        }
        free(B);
}
 
template <typename T, typename Func> bool Sort(Func funcSort, 
              T * A, long n, long * com, long * exc, long * time)
{
       // LARGE_INTEGER freq, t1, t2;
       // if(QueryPerformanceFrequency(&freq))
       // {
       //        QueryPerformanceCounter(&t1);
                funcSort(A, n, com, exc);
       //        QueryPerformanceCounter(&t2);
       //       time = 1000 * (t2.QuadPart - t1.QuadPart) / freq.QuadPart;
                return true;
       // }
       // else
       // {
       //        return false;
       //}
//}
}
http://codepad.org/6AxFM1C2
1
savak
2 / 2 / 0
Регистрация: 28.03.2009
Сообщений: 61
17.11.2009, 21:12  [ТС] #7
Ваш код компилится... Когда сделал все изменения в своём, всё те же ошибки показывает...((

Добавлено через 3 минуты
Все я разобрался, спасибо большое...

Я забыл про <long> в вызове:

C++
1
Sort(CountingSort<long>, A, N, &com, &exc, &timet);
0
17.11.2009, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2009, 21:12
Привет! Вот еще темы с ответами:

Конфликты хейдеров,не знаю как исправить - C++
Помоги плз,почитал в интернете,пишут,что конфликт хейдеров. Вот какие ошибки выдает k:\курсовой проект\курсовой проект\vd.h(1): error...

Не знаю как исправить ошыбку в коде - C++
Ошыбка, наверное, в том что я в классе roslunu описываю ф-ию get_name, где пам'ять под name выделена динамически, а в следующих классах...

Не знаю как исправить ошибку в программе - C++
Добрый день. Вот код программы: #pragma argsused #include &lt;iostream.h&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt; void insert (int...

Не знаю как исправить ошыбку в коде - C++
Выбивает вот-это error C2679: бинарный &quot;=&quot;: не найден оператор, принимающий правый операнд типа &quot;flower (__cdecl *)(void)&quot; (или приемлемое...


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

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

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