| 
			| 
					
						| KBAC | 
								|  | «  : 24-03-2012 14:11 »  |  | 
 
 Есть файл "propertygrammar.h" #pragma once#ifndef R
 #define R
 
 #include <string>
 using namespace std;
 
 #define COUNT_RULES 23
 
 extern struct line {
 char *value;
 int property;
 line *next;
 };
 
 extern struct mnote {
 int m;
 string l;
 mnote *next;
 };
 
 
 bool keytest (char*, line*);
 int mcompute (char*, int);
 void writetable (char*, int, line*);
 
 // количество символов правой части для каждого правила
 const short int CS[] = {1,2,1,2,1,2,5,3,0,2,
 1,3,2,4,0,1,3,1,1,1,3,3,1,0,2,2};
 
 // массив для хранения свойств текущего правила
 line *alltable[20] = {0};
 // массив указателей на таблицы допустимых свойств (m)
 mnote *mtables[COUNT_RULES];
 
 void inputMtable();
 int searchKey(string, int);
 char itoch(int);
 
 #endif
 Я его включаю в .срр и в .h. Почему пишет  1>flex.obj : error LNK2005: "struct mnote * * mtables" (?mtables@@3PAPAUmnote@@A) уже определен в bison.obj1>flex.obj : error LNK2005: "struct line * * alltable" (?alltable@@3PAPAUline@@A) уже определен в bison.obj
 1>propertygrammar.obj : error LNK2005: "struct mnote * * mtables" (?mtables@@3PAPAUmnote@@A) уже определен в bison.obj
 1>propertygrammar.obj : error LNK2005: "struct line * * alltable" (?alltable@@3PAPAUline@@A) уже определен в bison.obj
 1>C:\Users\Dude\Documents\Visual Studio 2010\Projects\ТЯП_КП_PERL\Debug\ТЯП_КП_PERL.exe : fatal error LNK1169: обнаружен многократно
 определенный символ - один или более
 Не понимаю где могут быть определены еще эти структуры. Смотрел в исходниках по поиску - ничего.  Можете убедиться сами. Залил исходники сюда http://rghost.ru/37195100 .  Буду очень благодарен если хоть кто-то поглядит исходники.  |  
						| 
								|  |  
								|  |  Записан | 
 
 У тебя все получится, главное -- верить и делать.Порадоваться, когда все плохо -- легче, чем ты думаешь.
 В действии счастье.
 Вовлекая людей важно быть увлеченным чужой жизнью.
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #1 : 24-03-2012 15:12 »  |  | 
 
 KBAC, у тебя в заголовке определены глобальные переменные. Заголовок, видимо, используется в разных модулях. Соотв., при компиляции получается несколько экземпляров переменной и линкер не может решить возникший конфликт.
 В заголовках используй объявления extern, а сами переменные определи только в одном модуле.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #2 : 24-03-2012 15:17 »  |  | 
 
 А зачем нужно ключевое слово extern при объявлении структур? |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #3 : 24-03-2012 15:26 »  |  | 
 
 А зачем нужно ключевое слово extern при объявлении структур?
 Чтобы можно было обращаться к глобальной переменной в другом модуле. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #4 : 24-03-2012 15:28 »  |  | 
 
 RXL, В коде только объявление структуры. Нету никаких переменных привязвнных к структуре при объявлении.  |  
						| 
								|  |  
								| « Последнее редактирование: 24-03-2012 15:30 от Finch » |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #5 : 24-03-2012 15:29 »  |  | 
 
 Разве? // количество символов правой части для каждого правилаconst short int CS[] = {1,2,1,2,1,2,5,3,0,2,
 1,3,2,4,0,1,3,1,1,1,3,3,1,0,2,2};
 
 // массив для хранения свойств текущего правила
 line *alltable[20] = {0};
 // массив указателей на таблицы допустимых свойств (m)
 mnote *mtables[COUNT_RULES];
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #6 : 24-03-2012 15:31 »  |  | 
 
 Угу extern struct line {char *value;
 int property;
 line *next;
 };
 
 
 extern struct mnote {
 int m;
 string l;
 mnote *next;
 };
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #7 : 24-03-2012 15:37 »  |  | 
 
 1>flex.obj : error LNK2005: "struct mnote * * mtables" (?mtables@@3PAPAUmnote@@A) уже определен в bison.obj1>flex.obj : error LNK2005: "struct line * * alltable" (?alltable@@3PAPAUline@@A) уже определен в bison.obj
 1>propertygrammar.obj : error LNK2005: "struct mnote * * mtables" (?mtables@@3PAPAUmnote@@A) уже определен в bison.obj
 1>propertygrammar.obj : error LNK2005: "struct line * * alltable" (?alltable@@3PAPAUline@@A) уже определен в bison.obj
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #8 : 24-03-2012 15:49 »  |  | 
 
 Собственно Ром, не к тебе был вопрос    А к топикпастеру. Как дополнение к твоему ответу. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #9 : 24-03-2012 15:49 »  |  | 
 
 Ну, а я не понял.    |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| KBAC | 
								|  | « Ответ #10 : 26-03-2012 16:03 »  |  | 
 
 Прошу прощения за задержку ответа в столь интересной теме    В общем, немного почитал, изменил, но все равно не получилось. файл .h #pragma once
 #include <string>
 using namespace std;
 
 #define COUNT_RULES 23
 
 struct line {
 char *value;
 int property;
 line *next;
 };
 struct mnote {
 int m;
 string l;
 mnote *next;
 };
 
 bool keytest (char*, line*);
 int mcompute (char*, int);
 void writetable (char*, int, line*);
 
 void inputMtable();
 int searchKey(string, int);
 char itoch(int);
 
 // количество символов правой части для каждого правила
 extern const short int CS[];
 // массив для хранения свойств текущего правила
 line *alltable[20];
 // массив указателей на таблицы допустимых свойств (m)
 mnote *mtables[COUNT_RULES];
 файл определений .срр  #include "propertygrammar.h"#include <fstream>
 #include <iostream>
 
 
 extern const short int CS[] = {1,2,1,2,1,2,5,3,0,2,
 1,3,2,4,0,1,3,1,1,1,3,3,1,0,2,2};
 
 
 extern mnote *mtables[COUNT_RULES] = {0};
 extern line *alltable[20] = {0};
 // ...
 Ошибки те же самые. Добавлено через 1 минуту и 45 секунд:Finch , пробовал методом простого перебора решить проблему.Добавлено через 40 минут и 8 секунд: Все , разобрался.  // количество символов правой части для каждого правилаextern const short int CS[];
 // массив для хранения свойств текущего правила
 extern line *alltable[20];
 // массив указателей на таблицы допустимых свойств (m)
 extern mnote *mtables[COUNT_RULES];
 |  
						| 
								|  |  
								| « Последнее редактирование: 26-03-2012 16:45 от KBAC » |  Записан | 
 
 У тебя все получится, главное -- верить и делать.Порадоваться, когда все плохо -- легче, чем ты думаешь.
 В действии счастье.
 Вовлекая людей важно быть увлеченным чужой жизнью.
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #11 :  26-03-2012 16:52 »   |  | 
 
 KBAC, уже изобрели классы. Не слышал ?   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| гайка 
								Гость
 | 
								|  | « Ответ #12 : 27-03-2012 15:43 »  |  | 
 
 Алексей1153++, он использует код, сгенерированный одной примерзкой утилитой. Она не в курсе, что классы уже появились   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #13 : 27-03-2012 15:50 »  |  | 
 
 Название в студию. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| KBAC | 
								|  | « Ответ #14 : 27-03-2012 16:14 »  |  | 
 
 Да, слышал. Только как прикрутить их по-умному наверно буду думать когда на душе легче станет, что ничего еще не сделано вообще. Так сразу в глаза не бросается как это можно сделать.  Утилка называется Bison. http://www.linux.org.ru/books/GNU/bison/bison_1.html |  
						| 
								|  |  
								|  |  Записан | 
 
 У тебя все получится, главное -- верить и делать.Порадоваться, когда все плохо -- легче, чем ты думаешь.
 В действии счастье.
 Вовлекая людей важно быть увлеченным чужой жизнью.
 |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #15 : 27-03-2012 16:39 »  |  | 
 
 Ну там ясно сказано    С без плюсов. Не должен знать классов. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #16 : 27-03-2012 16:41 »  |  | 
 
 KBAC, генерируемый код то поди сишный, без полюсов? |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| KBAC | 
								|  | « Ответ #17 : 28-03-2012 15:33 »  |  | 
 
 RXL, именно. Но надо еще сделать алгоритм семантического анализа. За меня этот алгоритм никто не напишет, так что есть смутная возможность вставить классы в какую-нибудь щель между прочим кодом.  |  
						| 
								|  |  
								|  |  Записан | 
 
 У тебя все получится, главное -- верить и делать.Порадоваться, когда все плохо -- легче, чем ты думаешь.
 В действии счастье.
 Вовлекая людей важно быть увлеченным чужой жизнью.
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #18 : 28-03-2012 16:39 »  |  | 
 
 А компилятор С++? В таком случае лучше оборачивать код: extern "C" {// сишный код
 }
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| KBAC | 
								|  | « Ответ #19 : 28-03-2012 20:53 »  |  | 
 
 Не знал такую примочку. Спасибо за совет.  |  
						| 
								|  |  
								|  |  Записан | 
 
 У тебя все получится, главное -- верить и делать.Порадоваться, когда все плохо -- легче, чем ты думаешь.
 В действии счастье.
 Вовлекая людей важно быть увлеченным чужой жизнью.
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #20 : 29-03-2012 08:53 »  |  | 
 
 Гайка, ужасы какие-то ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	|  |