![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Kirgston |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Ребята вот такой вот вопросик... есть
IT.h
Если я этот код даю в инклюд в другом файле, точнее не код а файл то получается еррор: 1>IT.obj : error LNK2005: "struct gObjIllusionPlayerCFG (* gObjIllusionPlayer)[40]" (?gObjIllusionPlayer@@3PAY0CI@UgObjIllusionPlayerCFG@@A) уже определен в main.obj 1>IT.obj : error LNK2005: "struct gObjIllusionCommonCFG gObjIllusionCommon" (?gObjIllusionCommon@@3UgObjIllusionCommonCFG@@A) уже определен в main.obj 1>IT.obj : error LNK2005: "struct gObjIllusionTeamCFG * gObjIllusionRoom" (?gObjIllusionRoom@@3PAUgObjIllusionTeamCFG@@A) уже определен в main.obj 1>IT.obj : error LNK2005: "struct SkillStruct * gObjSkillStruct" (?gObjSkillStruct@@3PAUSkillStruct@@A) уже определен в main.obj 1> Создается библиотека D:\VC 2008 Samples\Addon\Release\Addon.lib и объект D:\VC 2008 Samples\Addon\Release\Addon.exp 1>D:\VC 2008 Samples\Addon\Release\Addon.dll : fatal error LNK1169: обнаружен многократно определенный символ - один или более 1>Журнал построения был сохранен в "file://d:\VC 2008 Samples\Addon\Addon\Release\BuildLog.htm" 1>Addon - ошибок 5, предупреждений 3 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
нельзя в хедерах переменные объявлять. получается, что у тебя одна и та же переменная во всех единицах трансляции. для таких целей есть ключевое слово extern. объявляешь в одном из cpp файлов свои переменные, а к объявлению в хедере добавляешь слово extern.
-------------------- ![]() |
|||
|
||||
Kirgston |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
пфф добавил екстерн - та же ошибка. Во всех модулях использую #pragma once . В принципе перенес обявление переменных структур в cpp модуль. Они мне и так не нужны как глобальные. Но не пойму... почему я их не могу сделать глобальными? ...
|
|||
|
||||
Cheloveck |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Ты их можешь сделать глобальными. Но компилироваться они должны только в одном модуле. А ключевое слово extern говорит о том, что переменную компоновщику нужно искать в другом obj файле.
Это немного другое. Это защита от повторного включения, а не гарантия включения) Как говорил Станиславский: "Не верю!". Что-то где--то не так сделал. Код в студию (и .cpp и .h). Кстати, ты не забыл включить заголовочный файл везде, где используешь эти переменные? Добавлено через 41 секунду Да, и к слову, глобальные переменные - это зло. А extern глобальные переменные - зло в квадрате. Добавлено через 5 минут и 28 секунд
Ну, двумерный массив, это что бы разрешить последующие вопросы. Добавлено через 6 минут и 3 секунды Выводит, естесственно, 100 -------------------- ![]() |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
с какой стати функция print берёт на себя обязанности, никак не согласующиеся с ней? ![]() *** с таким же успехом можно в неё добавить функцию вычисления полинома и форматирование винчестера ![]() Это сообщение отредактировал(а) zim22 - 5.1.2010, 19:07 |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
![]()
каюсь. прошу пощады. не вели казнить! -------------------- ![]() |
|||
|
||||
Kirgston |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Ну сорц то очень длинный... порядка 1к строчек. Просто как... конечно ничего не забыл и т.д. щас всё перевел на "локальные переменные" и всё работает. Конечно мб оно то и зло в квадрате... но иногда зло крайне необходимо)))) ну так построена программка. Причем в других модулях есть такое (тоже екстерн и т.д.) и они спокойно подключаются... а тут почему то начинает орать... ладно бог с ним =) проблему решил хоть не нормальным способом, но решил =)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |