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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 20:58   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение friend function (c++)

Все работало, пока я не добавил в класс дружественную функцию( она суммирует значения у выбранного мною человека). Она то и работает, но по завершению работы прг - сбой.
Что у меня не так?

friend function:
Код:
void sum(bank ob)
{
	char line[22];int s=0;
	cout<<" input name:"<<endl;
	cin>>line;
	for(int i=0;i<ob.n;i++)
	{
		if(strcmp(line,ob.name[i])==0)
		{
			for(int j=0;j<ob.vc[i];j++)
				s+=ob.salary[i][j];
		}
	}
	cout<<"\n"<<s<<endl;
}
Весь код:

Код:
class bank
{   
private:
	char *bank_name;
	char **name;
	int **value;
	int **salary;
public:
	int n,*vc;
	bank();
	~bank();
	void add();
	void show();
	void setsize();
	friend void sum(bank ob);
};
bank::bank()
{
	 n=0;
	 int **value=0,**salary=0;
	 char **name='\0',*bank_name='\0';
}
void bank::setsize()
{
	cout<<" size (n):"<<endl;
	cin>>n;
}
void bank::add()
{
    bank_name=new char[33];
    cout<<"input bank_name\n"<<endl;
	cin>>bank_name;

	char str[55];
	vc=new int[n];
	name=new char *[n];
	value=new int *[n];
	salary=new int *[n];
for(int i=0;i<n;i++)
{
	system("cls");
	cout<<i<<":iput name:\n"<<endl;
	cin>>str;
	name[i]=new char[strlen(str)+1];
	strcpy(name[i],str);

	cout<<"input amount of values:";
cin>>vc[i];
value[i]=new int[n];
salary[i]=new int[n];
for(int j=0;j<vc[i];j++)
{
	cout<<"values:"<<j<<endl;
cin>>value[i][j];
cout<<"salary:"<<endl;
cin>>salary[i][j];
}
}
system("cls");
}
void bank::show()
{
	cout<<bank_name<<endl;
	for(int i=0;i<n;i++)
	{
	cout<<name[i]<<"\n";
	for(int j=0;j<vc[i];j++)
	{
   cout<<value[i][j]<<" "<<salary[i][j]<<endl;
	}
	}
}
void sum(bank ob)
{
	char line[22];int s=0;
	cout<<" input name:"<<endl;
	cin>>line;
	for(int i=0;i<ob.n;i++)
	{
		if(strcmp(line,ob.name[i])==0)
		{
			for(int j=0;j<ob.vc[i];j++)
				s+=ob.salary[i][j];
		}
	}
	cout<<"\n"<<s<<endl;
}

bank::~bank()
{
	delete []name;
	delete []bank_name;
	delete []value;
	delete []salary;
	delete []vc;
}
void main()
{
	bank obj;
	obj.setsize();
	obj.add();
	obj.show();
	sum(obj);
	system("PAUSE");
}
zhenya.ya вне форума Ответить с цитированием
Старый 30.09.2010, 09:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты же с объектами работаешь? При твоем случае методы должны быть статическими, или работать по хорошему:
Код:
    bank *obj=new bank;
    obj->setsize();
    obj->add();
    obj->show();
    sum(obj);
    delete obj;
    system("PAUSE");
и
Код:
void sum(bank *ob)
{
    char line[22];int s=0;
    cout<<" input name:"<<endl;
    cin>>line;
    for(int i=0;i<ob->n;i++)
    {
        if(strcmp(line,ob->name[i])==0)
        {
            for(int j=0;j<ob->vc[i];j++)
                s+=ob->salary[i][j];
        }
    }
    cout<<"\n"<<s<<endl;
}
Как и полагается работать с объектами, создавая, и освобождая.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2010, 18:17   #3
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

ругается: error C2248: bank::name: невозможно обратиться к private член, объявленному в классе "bank"
zhenya.ya вне форума Ответить с цитированием
Старый 30.09.2010, 20:43   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

код показывайте, забыли зафрендить?
p51x вне форума Ответить с цитированием
Старый 30.09.2010, 20:46   #5
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

Код:
class bank
{   	
private:
	char *bank_name;
	char **name;
	int **value;
	int **salary;
public:
	int n,*vc;
	bank();
	~bank();
	void add( );
	void show( );
	void setsize();
	friend void sum(bank ob);
};
bank::bank()
{
	 n=0;
	 int **value=0,**salary=0;
	 char **name='\0',*bank_name='\0';
}
void bank::setsize()
{
	cout<<" size (n):"<<endl;
	cin>>n;
}
void bank::add()
{
    bank_name=new char[33];
    cout<<"input bank_name\n"<<endl;
	cin>>bank_name;

	char str[55];
	vc=new int[n];
	name=new char *[n];
	value=new int *[n];
	salary=new int *[n];
for(int i=0;i<n;i++)
{
	system("cls");
	cout<<i<<":iput name:\n"<<endl;
	cin>>str;
	name[i]=new char[strlen(str)+1];
	strcpy(name[i],str);

	cout<<"input amount of values:";
cin>>vc[i];
value[i]=new int[n];
salary[i]=new int[n];
for(int j=0;j<vc[i];j++)
{
	cout<<"values:"<<j<<endl;
cin>>value[i][j];
cout<<"salary:"<<endl;
cin>>salary[i][j];
}
}
system("cls");
}
void bank::show()
{
	cout<<bank_name<<endl;
	for(int i=0;i<n;i++)
	{
	cout<<name[i]<<"\n";
	for(int j=0;j<vc[i];j++)
	{
   cout<<value[i][j]<<" "<<salary[i][j]<<endl;
	}
	}
}
void sum(bank *ob)
{
    char line[22];int s=0;
    cout<<" input name:"<<endl;
    cin>>line;
    for(int i=0;i<ob->n;i++)
    {
        if(strcmp(line,ob->name[i])==0)
        {
            for(int j=0;j<ob->vc[i];j++)
                s+=ob->salary[i][j];
        }
    }
    cout<<"\n"<<s<<endl;
}
bank::~bank()
{
	delete []name;
	delete []bank_name;
	delete []value;
	delete []salary;
	delete []vc;
}
void main()
{
	bank *obj=new bank;
    obj->setsize();
    obj->add();
    obj->show();
    sum(obj);
    delete obj;
    system("PAUSE");

}

Последний раз редактировалось Stilet; 01.10.2010 в 09:16.
zhenya.ya вне форума Ответить с цитированием
Старый 01.10.2010, 09:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ругается: error C2248: bank::name: невозможно обратиться к private член, объявленному в классе "bank"
Я проверял запуском то что постил - все в порядке
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2010, 10:04   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
friend void sum(bank ob);
Код:
void sum(bank *ob)
Видите разницу???
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть готовый пример.Создание функций friend Aleksandr_Yanov Общие вопросы C/C++ 10 17.07.2010 04:57
function c++ strabik Общие вопросы C/C++ 1 19.05.2010 13:44
friend функция в clr Lazio Общие вопросы C/C++ 5 27.02.2010 23:13
Как работает Google Friend Connect??? hoza_syl JavaScript, Ajax 3 12.01.2010 21:55
Класси Friend, помогите пожалуйста Suren Общие вопросы C/C++ 2 28.05.2009 22:42