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

не понимаю что за ошибка - C++

Восстановить пароль Регистрация
 
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
19.05.2013, 03:54     не понимаю что за ошибка #1
привет всем! как исправить ошибку, который выдает компилятор
/home/september/console/priority_queueNodeATD/pq_node.cpp:-1: In member function 'Key PQ_node<Key, Value>::key_top() const':
/home/september/console/priority_queueNodeATD/pq_node.cpp:31: ошибка: expected primary-expression before '>' token
/home/september/console/priority_queueNodeATD/pq_node.cpp:31: ошибка: expected primary-expression before ')' token

создал класс PQ_node и унаследовал класс Dictionary...
вот код

Dictionary
C++
1
2
3
4
5
6
7
8
9
10
template<typename Key, typename Value>
void Dictionary<Key, Value>::key_show(void visit(Key)) const
{
    Node_key* tmp = pm_head_key;
    while(tmp)
    {
        visit(tmp->key);
        tmp = tmp->next;
    }
}
PQ_node
C++
1
2
3
4
5
6
7
8
9
10
11
template<typename Key, typename Value>
void PQ_node<Key, Value>::visit(Key key)
{ m_key.push_back(key); }
 
template<typename Key, typename Value>
Key PQ_node<Key, Value>::key_top() const
{
    Key tmp(0);
    Dictionary<Key, Value>::key_show(visit<Key>); //вот здесь ругается компилятор
    return tmp;
}
Добавлено через 1 час 27 минут
а если написать функцию visit() в клиенской части программы, то все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vector<int> r;
 
template<typename Key>
void visit(Key data)
{
    r.push_back(data);
}
 
int main()
{
    PQ_node<int, int> p2(12, 54);
    p2.key_push(45);
    cout<<"empty p2 "<<p2.key_empty()<<endl;
    cout<<"size p2 "<<p2.key_size()<<endl;
    p2.key_show(visit<int>);
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
19.05.2013, 12:27     не понимаю что за ошибка #2
C++
1
2
3
key_show(void visit(Key))
//...
key_show(visit<Key>)
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
19.05.2013, 22:29  [ТС]     не понимаю что за ошибка #3
и что это значит ?

Добавлено через 14 секунд
Croessmah, и что это значит ?
SpeZnaC
3 / 3 / 0
Регистрация: 18.05.2013
Сообщений: 11
19.05.2013, 22:51     не понимаю что за ошибка #4
у тебя функция key_show ничерта не принимает так как функция visit имеет тип void
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
19.05.2013, 22:58  [ТС]     не понимаю что за ошибка #5
SpeZnaC, как это исправить ?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.05.2013, 23:06     не понимаю что за ошибка #6
да можно тип посетителя не хардкодить, а в параметры шаблона запихнуть. компилятор сам выведет нужный тип.
тогда не только указатели на функции прокатят, но и объекты какие-нибудь:
C++
1
2
3
4
5
6
7
8
9
10
template<typename Key, typename Value, typename Visitor>
void Dictionary<Key, Value>::key_show(Visitor visit) const
{
    Node_key* tmp = pm_head_key;
    while(tmp)
    {
        visit(tmp->key);
        tmp = tmp->next;
    }
}
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
19.05.2013, 23:49  [ТС]     не понимаю что за ошибка #7
DU, все равно ошибка...

C++
1
2
3
4
5
6
7
template<typename Key, typename Value>
Key PQ_node<Key, Value>::key_top() const
{
    Key tmp(0);
    Dictionary<Key, Value>::key_show(visit<Key>); //вот здесь ругается компилятор
    return tmp;
}
может неправильно передаю visit() ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 22:32     не понимаю что за ошибка
Еще ссылки по теме:

Не понимаю, где ошибка C++
C++ ошибка не понимаю из-за чего
C++ Не понимаю что нужно изменить

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

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.05.2013, 22:32     не понимаю что за ошибка #8
я не обратил внимание на то, что у вас там не свободная функция а метод шаблона.
попробуйте по аналогии сделать:
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 <typename Key, typename Value>
class Dictionary
{
public:
  template <typename Visitor>
  void enumerate(Visitor visit);
};
 
template <typename Key, typename Value> // template class
template <typename Visitor>             // template method
void Dictionary<Key, Value>::enumerate(Visitor visit)
{
  visit(Value());
}
 
 
template <typename T>
void print(const T& obj)
{
  std::cout << obj << std::endl;
}
 
 
int main()
{
 
  Dictionary<int, int> d;
  d.enumerate(&print<int>);
  return 0;
}
Yandex
Объявления
20.05.2013, 22:32     не понимаю что за ошибка
Ответ Создать тему
Опции темы

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