| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | «  : 31-08-2004 11:05 »  |  | 
 
 Допустим есть какой-то класс Test. у него есть паблик функция  int GetTotalNumber(CString varname);Можно ли из другого класса добраться до этой функции, а конкретно получить возвращаемое ею значение ? ЗЫ. чую, что какую то чушь спросил :oops: |  
						| 
								|  |  
								| « Последнее редактирование: 01-12-2007 12:51 от Алексей1153++ » |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| Serega 
								Гость
 | 
								|  | « Ответ #1 : 31-08-2004 11:28 »  |  | 
 
 Конечно можно, нужно её вызвать   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #2 : 31-08-2004 11:37 »  |  | 
 
 нет, почему чушь, можно если не создавался экземпляр этого класса, то вызвать можно так: Test::GetTotalNumber(...); но в классе функцию надо объявить как static class CTest  {
 public:
 static int GetTotalNumber(CString varname);
 };
 
#include "Test.h"
 int CTest::GetTotalNumber(CString varname)
 {
 return 1;
 }
 
#include "Test.h"
 void CMyDlg::proc1()
 {
 int i = CTest::GetTotalNumber("rrr");
 }
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 01-12-2007 12:54 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Pu 
								Большой босс    Offline 
								78
								
								
								
								
								
							 | 
								|  | « Ответ #3 :  31-08-2004 11:48 »   |  | 
 
 Алексей1153,  добавочка. static функция должна пользовать только static атрибуты класса, либо ей на вход дать указатель на объект класса. (Ну это и так ясно).    |  
						| 
								|  |  
								|  |  Записан | 
 
 Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.(с) Артур Джонс
 |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #4 : 31-08-2004 11:58 »  |  | 
 
 Понятненько. А вот это что за мигня error C2593: 'operator =' is ambiguous ? |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| Serega 
								Гость
 | 
								|  | « Ответ #5 : 31-08-2004 12:05 »  |  | 
 
 Код покажи |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #6 : 31-08-2004 12:08 »  |  | 
 
 Делаю так : class Test{
 public :
 static void SetNumber(CString foo);
 static void GetNumber (CString foo2);
 }
потом ) class Test2{
 .....
 void Test2::Procseed()
 {
 Test::SetNumber("lalala");
 Test::GetNumber("blablabla");
 }
 }
Так нельзя ? |  
						| 
								|  |  
								| « Последнее редактирование: 01-12-2007 12:57 от Алексей1153++ » |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #7 : 31-08-2004 12:10 »  |  | 
 
 ругается так :unresolved external symbol "public: static void __cdecl Test::SetNumber(class CString)" (?SetNumber@Test@SAXVCString@@@Z)
 |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #8 : 31-08-2004 12:14 »  |  | 
 
 Прошу прощения, май мистэйк, забыл реализацию описать в классе Тест  :oops: |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #9 : 31-08-2004 12:33 »  |  | 
 
 Если ещё не надоел... class Test{
 public :
 UINT NOMER;
 static void GetNumber (CString foo2);
 //реализация функций
 void GetNumber(str_number) //str_number = "1234"
 {
 NOMER = (UINT)_ttoi(str_number);
 }
 }
вызывается функция тут : class Test2{
 .....
 void Test2::Procseed()
 {
 Test::GetNumber("blablabla");
 }
 }
Получаю ошибку компиляции : error C2597: illegal reference to data member 'Test::NUMBER' in a static member function |  
						| 
								|  |  
								| « Последнее редактирование: 01-12-2007 12:59 от Алексей1153++ » |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| Pu 
								Большой босс    Offline 
								78
								
								
								
								
								
							 | 
								|  | « Ответ #10 : 31-08-2004 12:36 »  |  | 
 
 UINT NOMER; - должен быть статик - смотри мой пост выше. |  
						| 
								|  |  
								|  |  Записан | 
 
 Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.(с) Артур Джонс
 |  |  | 
	| 
			| 
					
						| Pu 
								Большой босс    Offline 
								78
								
								
								
								
								
							 | 
								|  | « Ответ #11 : 31-08-2004 12:41 »  |  | 
 
 MOPO3, смысл в том что статик функции ты можешь вызвать без реально существующих объектов этого класса. Те обращаться к нестатик мемберам класса нельзя - их просто может не существовать на настоящий момент.  статик функции являются глобальными фунциями   . НО имеют  смысл в контексте пространства имен своего класса. |  
						| 
								|  |  
								|  |  Записан | 
 
 Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.(с) Артур Джонс
 |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #12 : 31-08-2004 12:42 »  |  | 
 
 Если делаю static UINT NOMER; , то получаю : unresolved external symbol "public: static unsigned int TEST::NUMBER" (?NUMBER@Test@@2IA) |  
						| 
								|  |  
								| « Последнее редактирование: 01-12-2007 13:05 от Алексей1153++ » |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| Pu 
								Большой босс    Offline 
								78
								
								
								
								
								
							 | 
								|  | « Ответ #13 : 31-08-2004 12:48 »  |  | 
 
 примерчик реализации class Test {
 public :
 static UINT NOMER;
 static void GetNumber (CString foo2);
 //реализация функций
 };
 
 в .cpp
 UINT Test::NOMER = 0;
 void Test::GetNumber(str_number) //str_number = "1234"
 {
 NOMER = (UINT)_ttoi(str_number);
 }
 
 class Test2
 {
 .....
 void Test2::Procseed()
 {
 Test::GetNumber("blablabla");
 }
 }
 
или class Test {
 public :
 UINT NOMER;
 static void GetNumber (CString foo2, Test *t=0);
 //реализация функций
 };
 
 в .cpp
 void Test::GetNumber(CString foo2, Test *t) //str_number = "1234"
 {
 if(t)
 t->NOMER = (UINT)_ttoi(foo2);
 }
 
 class Test2
 {
 .....
 void Test2::Procseed()
 {
 Test::GetNumber("blablabla");
 }
 }
 
в таком вот духе |  
						| 
								|  |  
								| « Последнее редактирование: 01-12-2007 13:07 от Алексей1153++ » |  Записан | 
 
 Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.(с) Артур Джонс
 |  |  | 
	| 
			| 
					
						| Pu 
								Большой босс    Offline 
								78
								
								
								
								
								
							 | 
								|  | « Ответ #14 : 31-08-2004 12:49 »  |  | 
 
 MOPO3, на последний твой поств спп надо сделать так
 UINT Test::NOMER = 0;
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.(с) Артур Джонс
 |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #15 : 31-08-2004 13:21 »  |  | 
 
 ОК, теперь работает. Спасибо всем огромное! Иду дальше ковыряться.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	|  |