Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Многократное объявление.  (Прочитано 16166 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« : 24-03-2012 14:11 » 

Есть файл "propertygrammar.h"
Код: (C++)
#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.obj
1>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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 24-03-2012 15:12 » 

KBAC, у тебя в заголовке определены глобальные переменные. Заголовок, видимо, используется в разных модулях. Соотв., при компиляции получается несколько экземпляров переменной и линкер не может решить возникший конфликт.

В заголовках используй объявления extern, а сами переменные определи только в одном модуле.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 24-03-2012 15:17 » 

А зачем нужно ключевое слово extern при объявлении структур?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 24-03-2012 15:26 » 

А зачем нужно ключевое слово extern при объявлении структур?

Чтобы можно было обращаться к глобальной переменной в другом модуле.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 24-03-2012 15:28 » 

RXL, В коде только объявление структуры. Нету никаких переменных привязвнных к структуре при объявлении.
« Последнее редактирование: 24-03-2012 15:30 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 24-03-2012 15:29 » 

Разве?

Код: (C++)
// количество символов правой части для каждого правила
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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 24-03-2012 15:31 » 

Угу
Код: (C++)
extern struct line {
        char *value;
        int property;
        line *next;
};


extern struct mnote {
        int m;
        string l;
        mnote *next;
};
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 24-03-2012 15:37 » 

Цитата
1>flex.obj : error LNK2005: "struct mnote * * mtables" (?mtables@@3PAPAUmnote@@A) уже определен в bison.obj
1>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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 24-03-2012 15:49 » 

Собственно Ром, не к тебе был вопрос Улыбаюсь А к топикпастеру. Как дополнение к твоему ответу.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 24-03-2012 15:49 » 

Ну, а я не понял.  Скромно так...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 26-03-2012 16:03 » 

Прошу прощения за задержку ответа в столь интересной теме Улыбаюсь В общем, немного почитал, изменил, но все равно не получилось.
файл .h
Код: (C++)
#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];
файл определений .срр
Код: (C++)
#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 секунд:
Все , разобрался.
Код: (C++)
// количество символов правой части для каждого правила
extern const short int CS[];
        // массив для хранения свойств текущего правила
extern line *alltable[20];
// массив указателей на таблицы допустимых свойств (m)
extern mnote *mtables[COUNT_RULES];
« Последнее редактирование: 26-03-2012 16:45 от KBAC » Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #11 : 26-03-2012 16:52 » 

KBAC, уже изобрели классы. Не слышал ? Улыбаюсь
Записан

гайка
Гость
« Ответ #12 : 27-03-2012 15:43 » 

Алексей1153++, он использует код, сгенерированный одной примерзкой утилитой. Она не в курсе, что классы уже появились Улыбаюсь
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #13 : 27-03-2012 15:50 » 

Название в студию.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 27-03-2012 16:14 » 

Да, слышал. Только как прикрутить их по-умному наверно буду думать когда на душе легче станет, что ничего еще не сделано вообще. Так сразу в глаза не бросается как это можно сделать.
Утилка называется Bison. http://www.linux.org.ru/books/GNU/bison/bison_1.html
Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 27-03-2012 16:39 » 

Ну там ясно сказано Улыбаюсь С без плюсов. Не должен знать классов.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 27-03-2012 16:41 » 

KBAC, генерируемый код то поди сишный, без полюсов?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 28-03-2012 15:33 » 

RXL, именно. Но надо еще сделать алгоритм семантического анализа. За меня этот алгоритм никто не напишет, так что есть смутная возможность вставить классы в какую-нибудь щель между прочим кодом.
Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 28-03-2012 16:39 » 

А компилятор С++? В таком случае лучше оборачивать код:

Код: (C++)
extern "C" {
  // сишный код
}
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KBAC
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 28-03-2012 20:53 » 

Не знал такую примочку. Спасибо за совет.
Записан

У тебя все получится, главное -- верить и делать.
Порадоваться, когда все плохо -- легче, чем ты думаешь.
В действии счастье.
Вовлекая людей важно быть увлеченным чужой жизнью.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #20 : 29-03-2012 08:53 » 

Гайка, ужасы какие-то )
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines