Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение модулей 
V
    Опции темы
Kirgston
Дата 5.1.2010, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Ребята вот такой вот вопросик... есть 
IT.h
Код

#pragma once

#include "GameServer.h"
    BOOL FAR PASCAL InitIllusion( char * FilePath );
    
    int IllusionGetPlayerTeam(DWORD PlayerID,int Level);
    
    void IllusionWaitRoomWarp(DWORD PlayerID,int Level);
    void IllusionEventRoomWarp();
    void IllusionEmptyPlayer(int Level, int Position);
    void IllusionInvitationCheck(DWORD PlayerID);
    void IllusionSkills(DWORD PlayerID, DWORD TargetID, int Skill);
    void IllusionCleanEventInfo(int Level);
    void IllusionGetWinner(int Level);
    void IllusionSelectHero(DWORD PlayerID,int Level);
    void IllusionReturnGift(DWORD PlayerID,int Level,int NPCX,int NPCY);
    void IllusionGetLeftTime(DWORD PlayerID);
    void IllusionListSend(DWORD PlayerID);
    void IllusionDataSend(int Level,int Team,PBYTE pProtocol, DWORD ProtocolLen);
    void IllusionSkinTeams(int Level,int Flag);
    int IllusionKillPoints(int Level,int Team,int Sum,int RestPoints);
    void IllusionSendSuccessPacket(int Level,int Team);
    void IllusionSendFailurePacket(int Level,int Team);
    
    DWORD WINAPI IllusionEventStart();
    DWORD WINAPI IllusionSendTimer(int Level,int ctime);
    DWORD WINAPI EndIllusion(int Level);
    DWORD WINAPI IllusionPlayerCheck(int Level);
    
    void Illusion__InsideTrigger(void * lpParam);
    void Illusion__Trigger(void * lpParam);

    typedef struct gObjIllusionPlayerCFG
    {            
        DWORD PlayerID;
        LPSTR Name;
        int Team;
        unsigned long CurrentExperience;
    }GOBJILLUSIONPLAYER;
    
    typedef struct gObjIllusionTeamCFG
    {
        int Start;
        int CurrentIllusionTimer;
        int Count;
        int BlueCount;
        int OrangeCount;
        int BlueScore;
        int OrangeScore;
        int BlueKillPoints;
        int OrangeKillPoints;
        int WinnerTeam;
        DWORD Hero;
        int HeroX;
        int HeroY;
    }GOBJILLUSIONTEAM;
    
    typedef struct gObjIllusionCommonCFG
    {
        int Enabled;        
        int MaxCount;
        int StartHour;
        int TimeLeft;
        int InsideTimer;
        int    CurrentSeconds;
        int Timer;
        int ItemType;
        int ItemIndex;
        int Itemlvl;
        int ItemOpt;
        int ItemLuck;
        int ItemSkill;
        int ItemDur;
        int ItemIsExc;
    }GOBJILLUSIONCOMMON;

        typedef struct SkillStruct
    {        
        int Halloween;
        int HalloweenTime;
        int HalloweenType;
        int Sleep;
        int SleepTime;
        int Sleepm_AttackRange;
        int Sleepm_MoveRange;
        int Sleepm_ViewRange;
        int Reflect;
        int ReflectTime;
        int ReflectMod;
        int Nail;
        int NailTime;
        int NailSender;
        int Sahamutt;
        int SahamuttTime;
        int SahamuttSender;
        int ExcDmg;
        int ExcDmgTime;
        int ExcDmgMod;
        int SuccessBlock;
        int SuccessBlockTime;
        int SuccessBlockMod;
        int Night;
        int NightTime;
        int NightDefenseMod;
        int SwordPower;
        int SwordPowerTime;
        int Symbol;
        int SymbolTime;
        int SymbolType;
        int Blossom;
        int BlossomTime;
        int BlossomType;
        int Explotion;
        int ExplotionTime;
        int MagicCircle;
        int MagicCircleAdd;
        int MagicCircleTime;
        
        int IT_MagicShieldOrder;
        int IT_MagicShieldOrderTime;
        int IT_RestraintOrder;
        int IT_RestraintOrderTime;

        int Transparent;
        int GladiatorsGlory;
        int GladiatorsGlorySeconds;
        int GladiatorsGloryExp;
    }GOBJSKILLSTRUCT;
    GOBJSKILLSTRUCT gObjSkillStruct[MAX_PLAYERID];

    GOBJILLUSIONPLAYER gObjIllusionPlayer[6][40];
    GOBJILLUSIONTEAM gObjIllusionRoom[6];
    GOBJILLUSIONCOMMON gObjIllusionCommon;

Если я этот код даю в инклюд в другом файле, точнее не код а файл то получается еррор:

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 ==========

PM MAIL   Вверх
Cheloveck
Дата 5.1.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



нельзя в хедерах переменные объявлять. получается, что у тебя одна и та же переменная во всех единицах трансляции. для таких целей есть ключевое слово extern. объявляешь в одном из cpp файлов свои переменные, а к объявлению в хедере добавляешь слово extern.
Код

    extern GOBJILLUSIONCOMMON gObjIllusionCommon;



--------------------
user posted image
PM Jabber   Вверх
Kirgston
Дата 5.1.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



пфф добавил екстерн - та же ошибка. Во всех модулях использую #pragma once . В принципе перенес обявление переменных структур в cpp модуль. Они мне и так не нужны как глобальные. Но не пойму... почему я их не могу сделать глобальными? ...
PM MAIL   Вверх
Cheloveck
Дата 5.1.2010, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



Ты их можешь сделать глобальными. Но компилироваться они должны только в одном модуле. А ключевое слово extern говорит о том, что переменную компоновщику нужно искать в другом obj файле.

Цитата(Kirgston @  5.1.2010,  11:13 Найти цитируемый пост)
Во всех модулях использую #pragma once .

Это немного другое. Это защита от повторного включения, а не гарантия включения)

Цитата(Kirgston @  5.1.2010,  11:13 Найти цитируемый пост)
добавил екстерн - та же ошибка

Как говорил Станиславский: "Не верю!". Что-то где--то не так сделал. Код в студию (и .cpp и .h). Кстати, ты не забыл включить заголовочный файл везде, где используешь эти переменные?

Добавлено через 41 секунду
Да, и к слову, глобальные переменные - это зло. А extern глобальные переменные - зло в квадрате.

Добавлено через 5 минут и 28 секунд
Код

// module.cpp

#include "module.h"

int x[10][10];

void print()
{
    std::cout << x[0][0] << std::endl;
    std::cin.get();
}

Код

// module.h

#include <iostream>

extern int x[10][10];

void print();


Код

// main.cpp

#include "module.h"

int main()
{
    x[0][0] = 100;
    print();
}


Ну, двумерный массив, это что бы разрешить последующие вопросы.

Добавлено через 6 минут и 3 секунды
Выводит, естесственно, 100


--------------------
user posted image
PM Jabber   Вверх
zim22
Дата 5.1.2010, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Cheloveck @  5.1.2010,  17:53 Найти цитируемый пост)
void print(){    
std::cout << x[0][0] << std::endl;    
std::cin.get();
}

с какой стати функция print берёт на себя обязанности, никак не согласующиеся с ней?  smile (имею ввиду std::cin.get())
***
с таким же успехом можно в неё добавить функцию вычисления полинома и форматирование винчестера smile

Это сообщение отредактировал(а) zim22 - 5.1.2010, 19:07


--------------------
PM MAIL   Вверх
Cheloveck
Дата 5.1.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



 smile 
Цитата(zim22 @  5.1.2010,  20:06 Найти цитируемый пост)
с какой стати функция print берёт на себя обязанности, никак не согласующиеся с ней?

каюсь. прошу пощады. не вели казнить!


--------------------
user posted image
PM Jabber   Вверх
Kirgston
Дата 5.1.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Ну сорц то очень длинный... порядка 1к строчек. Просто как... конечно ничего не забыл и т.д. щас всё перевел на "локальные переменные" и всё работает. Конечно мб оно то и зло в квадрате... но иногда зло крайне необходимо)))) ну так построена программка. Причем в других модулях есть такое (тоже екстерн и т.д.) и они спокойно подключаются... а тут почему то начинает орать... ладно бог с ним =) проблему решил хоть не нормальным способом, но решил =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1318 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.