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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 16:41   #1
Jane-sad
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 22
По умолчанию C++ Свойства. Ошибка

Подскажите и исправьте мне, пожалуйста, ошибку. Я только учусь программировать.
Имеется класс Man и класс Property. Написала класс Property точно по учебнику, а класс Man использую свой не из учебника. Компилятор выдает ошибку на строке Man(){Val.init(this,Print_man,Vvod_ man);};. Ругается на функции Print_man и Vvod_man.
Ошибка комилятора
error C3867: 'Man::Print_man': function call missing argument list; use '&Man::Print_man' to create a pointer to member
error C3867:Man::Vvod_man': function call missing argument list; use '&Man::Vvod_man' to create a pointer to member

Код:
#include<iostream>
#include<iomanip>
#include<string.h>
#include<conio.h>
#include<cstring>
#include<stdlib.h>
#include<string.h>

using namespace std;
const int LEN=80;

template <class T1,class T2>
class property
{typedef T1(T2::*get)();
 typedef void(T2::*set)(T1);
 T2 *m_owner;
 get m_get;
 set m_set;
public:
	operator T1()
	{return(m_owner->*m_get)();}
	void operator=(T1 data)
	{(m_owner->*m_set)();}
	property (): m_owner(0),m_get(0),m_set(0){};
	void init (T2 *const owner, get getmethod, set setmethod)
	{m_owner=owner;
	m_get=getmethod;
	m_set=setmethod;
	}
};

class Man
{
public:
	char name[LEN];
	char sname[LEN];
	char lname[LEN];
	int god;
	
public:
	property <int, Man> Val;
	Man(){Val.init(this,Print_man,Vvod_man);};  //вот здесь ошибка
	void Vvod_man();  
	void Print_man();  
	
};

void  Man::Vvod_man()
{
cout<<"\nVvedite name\n"; cin>>name;
cout<<"\nVvedite familia\n"; cin>>sname;	
cout<<"\nVvedite otchestvo\n"; cin>>lname;
cout<<"\nVvedite god\n"; cin>>god;
}

void Man::Print_man()
{cout<<endl<<"FIO:"<<name;
cout<<endl<<"IMYA:"<<sname;
cout<<endl<<"Otchestvo:"<<lname;
cout<<endl<<" GOD:"<<god;
}

int main()
{
Man obj;


return 0;
}

Последний раз редактировалось Stilet; 23.12.2010 в 17:25.
Jane-sad вне форума Ответить с цитированием
Старый 23.12.2010, 19:21   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Да нет. У вас в другом месте ошибка. Вы ж гляньте, как шаблон создан, а указатели на какие функции Вы передаёте.

Код:
typedef T1(T2::*get)();
 typedef void(T2::*set)(T1);
Вот Ваши тайпдефчики, которые ясно говорят, что get - это указатель на функцию, которая возвращает T1, что set - это указатель на функцию, которая принимает T1 в качестве параметра.
А Вы им берёте и подсовываете свои
Код:
void Vvod_man();  
	void Print_man();
Вы уж разберитесь, какие там у Вас get и set и создавайте Property со спокойной душой.
mMAg вне форума Ответить с цитированием
Старый 24.12.2010, 14:28   #3
Jane-sad
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 22
По умолчанию

Уважаемый, mMAg!
Спасибо большое, что откликнулись и подсказали, где ошибка. Но дело все в том, что я только учусь и мне очень сложно вас понять о чем вы говорите. Я сделала по образцу и после вашего комментария я откопмелировала образец из книги и там точнно такая же ошибка. Если можно исправьте мне пожалуйста, я вас очень прошу.
Jane-sad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
свойства системы netbioz Компьютерное железо 2 04.07.2010 18:02
Свойства компонентов Сид Общие вопросы Delphi 1 12.05.2010 20:22
свойства компонента street-walker Помощь студентам 2 07.01.2010 23:49
свойства DBNavigator Rin БД в Delphi 6 24.12.2009 00:04
Свойства файла ibn Общие вопросы .NET 0 23.04.2008 18:37