Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2013, 14:56   #1
zern0
Новичок
Джуниор
 
Аватар для zern0
 
Регистрация: 25.09.2013
Сообщений: 14
Стрелка Как присвоить адрес указателю на функцию внутри класса?

Помогите исправить ошибку

Код:
// узел
template<typename T>
struct T_Node
{
	T				m_value;			// значение
	T_Node<T>		*m_p_prev;			// указатель на предыдущий узел
	T_Node<T>		*m_p_next;			// указатель на следующий узел
};

// список
template<typename T>
class TC_List
{
private:
	T_Node<T>		*m_p_start;			// указатель на начало списка
	T_Node<T>		*m_p_finish;		// указатель на конец списка
	int				m_size;				// размер списка (количество узлов)

public:

	bool IsMin(const T_Node<T> *p_a, const T_Node<T> *p_b) const;
	bool IsMax(const T_Node<T> *p_a, const T_Node<T> *p_b) const;
	void BubbleSort(bool (*p_f)(const T_Node<T> *, const T_Node<T> *));
};


template<typename T>
bool TC_List<T>::IsMin(const T_Node<T> *p_a, const T_Node<T> *p_b) const
{
	return p_a->m_value < p_b->m_value;
}


template<typename T>
bool TC_List<T>::IsMax(const T_Node<T> *p_a, const T_Node<T> *p_b) const
{
	return p_a->m_value > p_b->m_value;
}


template<typename T>
void TC_List<T>::BubbleSort(bool (*p_f)(const T_Node<T> *, const T_Node<T> *))
{
}






// -------------------------------------------------
Код:
int main()
{
	TC_List<double> list;
	bool (TC_List<bool>::*func)(const T_Node<bool> *p_a, const T_Node<bool> *p_b);
	
	func = &TC_List<bool>::IsMin; 

	list.BubbleSort(func);  // сортировка

	return 0;
}




\CodeBlocks\Laba\main.cpp||In function 'int main()':|
\CodeBlocks\Laba\main.cpp|16|error: cannot convert 'bool (TC_List<bool>::*)(const T_Node<bool>*, const T_Node<bool>*)const' to 'bool (TC_List<bool>::*)(const T_Node<bool>*, const T_Node<bool>*)' in assignment|
\CodeBlocks\Laba\main.cpp|24|error: no matching function for call to 'TC_List<double>::BubbleSort(bool (TC_List<bool>::*&)(const T_Node<bool>*, const T_Node<bool>*))'|
\CodeBlocks\Laba\include\Base.h|541 |note: candidates are: void TC_List<T>::BubbleSort(bool (*)(const T_Node<T>*, const T_Node<T>*)) [with T = double]|
||=== Build finished: 2 errors, 0 warnings ===|
zern0 вне форума Ответить с цитированием
Старый 25.09.2013, 15:05   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
bool IsMin(const T_Node<T> *p_a, const T_Node<T> *p_b) const; //<--- константая

Код:
bool (TC_List<bool>::*func)(const T_Node<bool> *p_a, const T_Node<bool> *p_b); //<--- не константная

Код:
bool (TC_List<bool>::*func)(const T_Node<bool> *p_a, const T_Node<bool> *p_b)const; //<--- бум бум?
_Bers вне форума Ответить с цитированием
Старый 25.09.2013, 15:18   #3
zern0
Новичок
Джуниор
 
Аватар для zern0
 
Регистрация: 25.09.2013
Сообщений: 14
По умолчанию

_Bers, спасибо )) Эта ошибка исчезла. Осталась еще одна вот здесь

Код:
list.BubbleSort(func);
\CodeBlocks\Test\main.cpp|24|error: no matching function for call to
'TC_List<double>::BubbleSort(bool (TC_List<bool>::*&)(const T_Node<bool>*, const T_Node<bool>*)const)'|

Как можно ее устранить?
zern0 вне форума Ответить с цитированием
Старый 25.09.2013, 15:23   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
void BubbleSort(bool (*p_f)(const T_Node<T> *, const T_Node<T> *)); //<--- принимает не константную
Код:
bool (TC_List<bool>::*func)(const T_Node<bool> *p_a, const T_Node<bool> *p_b)const; //<--- константая
Код:
void BubbleSort(bool (*p_f)(const T_Node<T> *, const T_Node<T> *)const ); //<--- бум бум?
Не бум бум, потому что принимает свободную функцию, а не метод...

Код:
void BubbleSort( TC_List<bool>::*p_f(const T_Node<bool> *p_a, const T_Node<bool> *p_b)const ); //<--- бум бум?
Не бум бум, потому что метод шаблонного класса, и должен быть с параметрами.
Как его сделать с параметрами - это вам домашнее задание.

Но для TC_List<bool> должно работать

Последний раз редактировалось _Bers; 25.09.2013 в 15:29.
_Bers вне форума Ответить с цитированием
Старый 25.09.2013, 15:33   #5
zern0
Новичок
Джуниор
 
Аватар для zern0
 
Регистрация: 25.09.2013
Сообщений: 14
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Код:
void BubbleSort( TC_List<bool>::*p_f(const T_Node<bool> *p_a, const T_Node<bool> *p_b)const ); //<--- бум бум?
так еще больше ошибок стало наверно что-то не так сделано

\CodeBlocks\Laba\src\..\include\Bas e.h|93|error: expected identifier before '*' token|
\CodeBlocks\Laba\src\..\include\Bas e.h|93|error: 'const' and 'volatile' function specifiers on 'p_f' invalid in parameter declaration|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|error: variable or field 'BubbleSort' declared void|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|error: expected unqualified-id before '*' token|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|error: expected primary-expression before 'const'|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|error: expected primary-expression before 'const'|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|error: there are no arguments to 'p_f' that depend on a template parameter, so a declaration of 'p_f' must be available|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)|
\CodeBlocks\Laba\src\..\include\Bas e.h|541|error: expected ')' before 'const'|
\CodeBlocks\Laba\src\..\include\Bas e.h|542|error: expected unqualified-id before '{' token|
||=== Build finished: 9 errors, 0 warnings ===|
zern0 вне форума Ответить с цитированием
Старый 25.09.2013, 15:38   #6
zern0
Новичок
Джуниор
 
Аватар для zern0
 
Регистрация: 25.09.2013
Сообщений: 14
По умолчанию

_Bers, все получилось! Большое спасибо ))
zern0 вне форума Ответить с цитированием
Старый 25.09.2013, 15:39   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

ну падумаешь, ошибся и не так скопипастил!

Мог бы и сам догадаться:

void BubbleSort( bool (TC_List<bool>::*p_f)(const T_Node<bool> *p_a, const T_Node<bool> *p_b)const ); //<--- бум бум?
_Bers вне форума Ответить с цитированием
Старый 25.09.2013, 15:39   #8
zern0
Новичок
Джуниор
 
Аватар для zern0
 
Регистрация: 25.09.2013
Сообщений: 14
По умолчанию

вот эта функция

Код:
template<typename T>
void TC_List<T>::BubbleSort( bool (TC_List<bool>::*p_f)(const T_Node<bool> *p_a, const T_Node<bool> *p_b) const )
{
}
zern0 вне форума Ответить с цитированием
Старый 25.09.2013, 15:43   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от zern0 Посмотреть сообщение
вот эта функция

Код:
template<typename T>
void TC_List<T>::BubbleSort( bool (TC_List<bool>::*p_f)(const T_Node<bool> *p_a, const T_Node<bool> *p_b) const )
{
}
Чувак, у меня седня выходной и я пьян в стельку. Хорош мне мозг выламывать. Я не понимаю, что ты имеешь ввиду этой записью.
_Bers вне форума Ответить с цитированием
Старый 25.09.2013, 15:45   #10
zern0
Новичок
Джуниор
 
Аватар для zern0
 
Регистрация: 25.09.2013
Сообщений: 14
По умолчанию

Я вообще то девушка
zern0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоить Указателю адрес из массива Char _KUL Общие вопросы C/C++ 9 16.05.2013 04:28
Для public переменной класса присвоить адрес ячеек из внешней переменной _KUL Qt и кроссплатформенное программирование С/С++ 2 28.05.2012 12:04
Как присвоить адрес массиву? VintProg Общие вопросы C/C++ 20 28.10.2011 14:27
Как передать адрес метода из dll в приложение и присвоить его событию OnClick? puga555 Общие вопросы Delphi 1 22.12.2009 17:04
как вызвать в Dll по указателю функцию, которая определена в главном потоке? SaintRain Общие вопросы Delphi 1 25.11.2006 08:27