| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 «  : 24-12-2009 06:27 »   | 
								
								 | 
							  
							 
							Есть некий класс: class A { public: 	void foo() { printf("dfsa"); } };
  Ниже пишу: но выдает  D:\Eugene\Temp\w32ca\w32ca.cpp(176) : error C2228: left of '.foo' must have class/struct/union type . Почему? Разве  А не класс? P.S. Использую: #include <stdafx.h> #include <iostream> #include <afx.h> #include <fstream.h> #include <windows.h> #include <string.h>
  У меня Microsoft Visual Studio 6.0  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 26-12-2009 06:23 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 24-12-2009 06:38 »   | 
								
								 | 
							  
							 
							Классические грабли    Компилятор принимает код  за объявление функции. Надо  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 24-12-2009 06:40 от Вад »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 24-12-2009 07:04 »   | 
								
								 | 
							  
							 
							Вот вообще тот класс (тела методов убрал, они тут без нужды), из-за которого весь сырбор: class Lister2 { public: 	Lister2():target(0), end(true), file(1) {}
  	~Lister2() { delete target; }
  	int getFile() const { return file; }
  	void set(string & target_path) 	{ 	}
  	BOOL next(string & where, int proc, string & get) 	{ 		return end; 	} protected: 	Lister2(const Lister2 & original) {} private: 	CFileFind cff; 	string * target; 	BOOL end; 	int file; };
  () убрал. Ошибки  left of ... must have class/struct/union type больше нету, спасибо. Но не все так хорошо, как хотелось бы. Получил следующее: nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj) nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex Debug/w32ca.exe : fatal error LNK1120: 2 unresolved externals
  Всё это выводит при попытке создать экземпляр класса Что теперь не так?  _______________________________________ А, всё, нашел: вся проблема с CFileFind cff;. Поменял на указатель.
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 24-12-2009 07:12 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 24-12-2009 07:16 »   | 
								
								 | 
							  
							 
							Всё-равно какая-то ерунда: при попитке выдает нагора      при первом компилировании:nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int,int,char const *,int)" (??2@YAPAXIHPBDH@Z) already defined in LIBCD.lib(dbgnew.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj) nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex Debug/w32ca.exe : fatal error LNK1120: 2 unresolved externals
       при следующих компиляциях:nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj) nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj) nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex Debug/w32ca.exe : fatal error LNK1120: 2 unresolved externals
  Что опять не слава Богу? P.S. На подобного не выдает, хотя по сути это одно и то же, только типы разные... (Это что же получается: нельзя динамически создавать CFileFind?     )  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 24-12-2009 07:19 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 24-12-2009 07:23 »   | 
								
								 | 
							  
							 
							_beginthreadex используешь? Библиотеки какие-нибудь дополнительно к проекту линкуешь? Похоже на конфликт 2х версий стандартной библиотеки (отладочной и релизной или многопоточной и однопоточной).  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 24-12-2009 07:27 »   | 
								
								 | 
							  
							 
							Использую только #include <stdafx.h> #include <iostream> #include <afx.h> #include <fstream.h> #include <windows.h> #include <string.h>
  Никаких lid или dll или еще чего к проекту не подключал. _beginthreadex в моем коде нету. Мог бы выложить код, но там 325 строк    ...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 24-12-2009 07:29 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 24-12-2009 07:33 »   | 
								
								 | 
							  
							 
							А что такое класс CFileFind? MFC? Возможно, где-то из MFC просочилась многопоточность. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	| 
		
		
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 24-12-2009 15:58 »   | 
								
								 | 
							  
							 
							Inkognito, если твою программу укоротить до такого (т.е. убрать ВСЕ):
  class A {};
  int main() {     A a;     return 0; }
  что скажет компилер и линкер? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 25-12-2009 12:42 »   | 
								
								 | 
							  
							 
							--------------------Configuration: w32ca - Win32 Debug-------------------- Compiling... w32ca.cpp Linking...
  w32ca.exe - 0 error(s), 0 warning(s)
  Впрочем, как и любой другой Microsoft Visual Studio 6.0     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-12-2009 12:44 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 25-12-2009 14:07 »   | 
								
								 | 
							  
							 
							Inkognito, а все свои инклуды вставил? Кстати я надеюсь, что ты не создал новый проект с предложенным мной исходником, а использовал свой "проблемный".
  Что за библиотека LIBCD, кто добавил, зачем добавил, кто писал, что внутри? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-12-2009 14:10 от lapulya »
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 25-12-2009 14:08 »   | 
								
								 | 
							  
							 
							Раз внешних библиотек самостоятельно не добавлялось - думаю, проблема в где-то в линковке с MFC.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 25-12-2009 19:49 »   | 
								
								 | 
							  
							 
							Inkognito, а все свои инклуды вставил?
  Да, все. Кстати я надеюсь, что ты не создал новый проект с предложенным мной исходником
  Конечно же нет. А зачем? Что такого ты делаешь в коде?  A a; написал верно, CFileFind динамически не создаешь. Смысл компилить твой код... Что за библиотека LIBCD, кто добавил, зачем добавил, кто писал, что внутри?
  lapulya, откуда мне знать, кто добавил LIBCD в afxmem.obj?   Использую только #include <stdafx.h> #include <iostream> #include <afx.h> #include <fstream.h> #include <windows.h> #include <string.h>
  Никаких lid или dll или еще чего к проекту не подключал.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-12-2009 19:51 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 25-12-2009 20:41 »   | 
								
								 | 
							  
							 
							Inkognito,  Смысл компилить - понять на что орет линкер. Именно поэтому надо использовать существующий проект, а не создавать новый. В твоем текущем проекте (тот что не линкуется) залинкована библиотека LIBCD (хотя ты говоришь, что ничего не линковал, но у линкера на этот счет другое мнение), вот я и спрашиваю что это за хрень? Если ты создал новый проект, то там естественно никакой LIBCD нет, поэтому то и проблемы нет, поэтому и компилить мой пример в новом проекте смысла нет. откуда мне знать, кто добавил LIBCD в afxmem.obj? эту фразу я вообще не понял. Кстати, можно грохнуть LIBCD из проекта и посмотреть, на что будет орать анресолвед экстернал симбол.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									«  Ответ #14 : 25-12-2009 22:04 »    | 
								
								 | 
							  
							 
							Куда грохнуть libcd? это же отладочная LIBC. Она по дефолту включается, с ней не должно быть проблем с самой по себе.  А afx*.obj - это MFC-шные, насколько я понимаю. Вот где-то здесь и проблема: будто в MFC одна версия библиотеки LIBC слинкована, а в проекте - другая.
  Inkognito, как ты подключал MFC - мастером создавал MFC-проект? Были ещё какие-то манипуляции с проектом и mfc? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-12-2009 22:06 от Вад »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 26-12-2009 00:17 »   | 
								
								 | 
							  
							 
							Это у меня вообще Win32 Console Application. Не стояло сюда MFC пихать?   CFileFind убрал з кода полностью. Заменил его с помощью WIN32_FIND_DATA, FindFirstFile, FindLastFile. Вот функция, котороя ищет файл: 	// Знайти наступний файл 	bool next(string path, string & get, int process = 0) 	{ 		if(neoc) 		{ 			nowfilenumber = 0; 			isFound = true;
  			WIN32_FIND_DATA w32FileData; 			HANDLE hSearch; 			BOOL isFirst = TRUE; 			 			// Шукаємо файл з потрібним номером 			while(true) 			{ 				if(isFirst) 				{ 					// Намагаємося знайти перший файл 					hSearch = FindFirstFile(target.c_str(), &w32FileData); 					if(hSearch == INVALID_HANDLE_VALUE) 						isFound = false; 					isFirst = FALSE; 				} 				else 				{ 					// Шукаємо наступний файл 					isFound = (bool)FindNextFile(hSearch, &w32FileData); 				}
  				if(!isFound) // Якщо не знайшли, то в цій папці шукати більше 				             // нічого 					break; 					 				isFound = false; // Файл знайшли, але він нам не підходить по 				                 // номеру (або підходить: перевірка зразу нижче)
  				// Перевіряємо, чи це не папка 				if(w32FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 				{ 					// Переходимо всередину папки 					string path_temp = path; 					path_temp += "\\*.*"; 					// Власне, перехід 					next(path_temp, get, process + 1); 					// Чи знайдений файл після рекурсії? 					if(isFound) 						return true; 				} 				else 				{ 					++nowfilenumber; // Знайшли новий файл 					if(nowfilenumber > lastfilenumber) // Якщо це той файл, 					                                   // який ми шукали 					{ 						// Ініціалізуємо номер останнього відкритого файла 						lastfilenumber = nowfilenumber; 						// Ініціалізуємо шлях до файла 						get = path; 						get += w32FileData.cFileName; 						// Файл знайдено! 						isFound = true;
  cout << get.c_str() << endl; // Добавил для отладки; в конечном варианте этого не будет
  						return true; 					} 				} 			}
  			// Якщо навіть початковий процес не знайшов файл, то шукати 			// тут більше нічого: або всі файли вже опрацьовані, або 			// ціль задано невірно 			if((!isFound) && (process == 0)) 				neoc = false; 		}
  		return neoc; 	}
  Но вот проблема: код 				if(w32FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 				{ 					// Переходимо всередину папки 					string path_temp = path; 					path_temp += "\\*.*"; 					// Власне, перехід 					next(path_temp, get, process + 1); 					// Чи знайдений файл після рекурсії? 					if(isFound) 						return true; 				}
  не работает, как должен. То есть он не заходит внутрь подпапки, а просто добавляет символ "\" в конец путя... Пока не сможет найти  какое_то_имя_папки\\. Подскажите пожалуйста, как мне зайти внутрь подпапки для поиска там файлов (и подпапок)?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 26-12-2009 06:00 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Dr.Yevhenius
							
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 26-12-2009 05:59 »   | 
								
								 | 
							  
							 
							Разобрался сам    . Код исправил. Работающая функция поиска файлов/папок: 	bool next(string path, string & get, int process = 0) 	{ 		if(neoc) 		{ 			nowfilenumber = 0; 			isFound = true;
  			WIN32_FIND_DATA w32FileData; 			HANDLE hSearch; 			BOOL isFirst = TRUE; 			 			// Шукаємо файл з потрібним номером 			while(true) 			{ 				if(isFirst) 				{ 					string path2 = path; 					if(process != 0) 						path2 += "*.*"; 					// Намагаємося знайти перший файл 					hSearch = FindFirstFile(path2.c_str(), &w32FileData); 					if(hSearch == INVALID_HANDLE_VALUE) 						isFound = false; 					isFirst = FALSE; 				} 				else 				{ 					// Шукаємо наступний файл 					isFound = (bool)FindNextFile(hSearch, &w32FileData); 				}
  				if(!isFound) // Якщо не знайшли, то в цій папці шукати більше 				             // нічого 					break; 					 				isFound = false; // Файл знайшли, але він нам не підходить по 				                 // номеру (або підходить: перевірка зразу нижче)
  				// Перевіряємо, чи це не папка 				if(w32FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 				{ 					// Пропускаємо "." і ".." 					if((strcmp(w32FileData.cFileName, ".") == 0) || 					   (strcmp(w32FileData.cFileName, "..") == 0)) 					   continue; 					// Переходимо всередину папки 					string path_temp = path; 					path_temp += "\\"; 					// Власне, перехід 					next(path_temp, get, process + 1); 					// Чи знайдений файл після рекурсії? 					if(isFound) 						return true; 				} 				else 				{ 					++nowfilenumber; // Знайшли новий файл 					if(nowfilenumber > lastfilenumber) // Якщо це той файл, 					                                   // який ми шукали 					{ 						// Ініціалізуємо номер останнього відкритого файла 						lastfilenumber = nowfilenumber; 						// Ініціалізуємо шлях до файла 						get = path; 						get += w32FileData.cFileName; 						// Файл знайдено! 						isFound = true;
  						return true; 					} 				} 			}
  			// Якщо навіть початковий процес не знайшов файл, то шукати 			// тут більше нічого: або всі файли вже опрацьовані, або 			// ціль задано невірно 			if((!isFound) && (process == 0)) 				neoc = false; 		}
  		return neoc; 	}
   Вад, за Классические грабли
  спасибо.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 26-12-2009 06:23 от Inkognito »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 26-12-2009 12:00 »   | 
								
								 | 
							  
							 
							Сорри, я не знал, что LIBCD отладочная библиотека. Но суть дела не меняется, надо было разобраться на что орал линкер, т.е. понять какие либы конфликтуют и кто и как добавил их в проект. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 26-12-2009 21:32 »   | 
								
								 | 
							  
							 
							lapulya[/b], ну, из слов топикстартера Это у меня вообще Win32 Console Application. Не стояло сюда MFC пихать?   я могу заключить, что надо смотреть, как именно был прилеплен к проекту MFC. Возможно, каким-то нетрадиционным способом    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 27-12-2009 22:51 »   | 
								
								 | 
							  
							 
							Вад, Угу, то он это после моего поста написал, а так со всем согласная я    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	 |