forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Вопрос-Ответ (http://forum.boolean.name/showthread.php?t=16032)

ANIK123 20.10.2012 20:08

Ответ: Вопрос-Ответ
 
ух ты) спасибо)
еще вопрос: а с "typedef unsigned short int usi;", который почти в каждом файле нужен, что делать?

Цитата:

Сообщение от Den (Сообщение 240774)
глобальные переменные зло, переработай архитектуру пока не поздно

ну камера у меня глобальная переменная, дефолтная текстура, обьект фастимейджа, и еще парочка

den 20.10.2012 20:13

Ответ: Вопрос-Ответ
 
сделать файл типа type.h, написать туда эту строчку и другие подобные и подключать его где надо.

ANIK123 21.10.2012 04:29

Ответ: Вопрос-Ответ
 
есть две переменные в юнит.hpp:
extern cUnit * PLAYER1, PLAYER2;
в юнит.срр пишу:
cUnit * PLAYER1 = 0;
cUnit * PLAYER2 = 0;

итог:e:\datar\inc\unit.cpp(249) : error C2040: PLAYER2: "cUnit *" отличается по уровням косвенного обращения от "cUnit"
еще не все...
в конструкторе: if (!(_stricmp(unit_name, "player1"))){is_player = true; PLAYER1 = this;}
итог: error C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'cUnit *const ' (или приемлемое преобразование отсутствует)
что за печаль такая(((

den 21.10.2012 11:04

Ответ: Вопрос-Ответ
 
Цитата:

есть две переменные в юнит.hpp:
extern cUnit * PLAYER1, PLAYER2;
в юнит.hpp только объявление класса Юнит
Цитата:

в юнит.срр пишу:
cUnit * PLAYER1 = 0;
cUnit * PLAYER2 = 0;
аналогично в юнит.срр только реализация конструктора, деструктора и методов класса Юнит

нахер ты там эти переменные создал?

ANIK123 21.10.2012 13:33

Ответ: Вопрос-Ответ
 
обьявил и определил игроков в самом конце файлов и работает)
может
проект еще в незапускаемом состоянии)

и еще: почему нельзя создавать там переменные?

den 21.10.2012 13:39

Ответ: Вопрос-Ответ
 
можно, но там им не место

ANIK123 21.10.2012 15:17

Ответ: Вопрос-Ответ
 
ура! запускается! но до конца еще есть куда пилять
вот заинклюдил как обычно очередной хедер/срр-шник, и вот: компилер упорно не хочет распознавать стд::вектор как тип, даже если пишу class std::vector; using namespace std;
подкинь какую-нить статью/книжечку где в кратце рассказывается о такой структуре проектов, или напиши что и как, а то еще всю программу закостыляю нафиг, если еще не закостылял
блин
(

если точнее:
хедер:
Код:

#ifndef _LOCALE_HPP
#define _LOCALE_HPP

#include <com.hpp>//глобальные переменные и т п

namespace LOCALE{
        extern char * Get(char part_name[32], char id[64]);
        extern void ChangeLanguage(char lang[]);

        extern void ChangeCurPart(char part_name[32]);
        extern char cur_part_name[32];

        class loc_part{
        public:
                ~loc_part();
                char name[32];
                class cText{
                public:
                        char id[64];
                        char data[1024];
                };
                vector<cText *> text;
        };
        extern vector<loc_part *> part;
};

#endif

срр:
Код:

#include <pch.h>

#include <locale.hpp>

vector<LOCALE::loc_part *> LOCALE::part; //<--------------ругается на это(((
............

pch.h
Код:

#ifndef PCH_H
#define PCH_H

.............
#include <vector>
.........

#endif

com.hpp:
Код:

#ifndef _COM_HPP
#define _COM_HPP

.............

using namespace std;
.............

#endif

еще говорит что error C2653: LOCALE: не является именем класса или пространства имен О_О Какого фига?!?

UPD:: да фиг с этим всем, если надо то могу дать ВЕСЬ исходный код

HolyDel 21.10.2012 16:04

Ответ: Вопрос-Ответ
 
судя по коду уже стопудово закостылял.

по текущему коду:
зачем функции extern?
она итак всегда extern если не inline.

почему название неймспейса написано капсом - капосм пишем дефайны или инлайн функции.

где включение pch.h? (оно очевидно должно быть в com.h, но я его там не вижу)
ну и явное задание размера массивов в параметрах и членах класса.
ты знаешь, что ты не сможешь вызвать функцию передавая ей массив другого (даже меньшего) размера?

почитай струструпа. главы 9,23,24.

ANIK123 23.10.2012 20:01

Ответ: Вопрос-Ответ
 
спасибо, почитал )
на счет проблемы: сделал вместо #include <locale.hpp> #include "locale.hpp" и все пошло как надо О_О
но есть еще в Локали функция: char * _(char id[64], char * text);
так вот, главный срр не хочет распознавать ни неймспейса Локали, ни функции
когда я повторно обьявляю эту функцию в главном срр, компилер просит 'libboost_locale-vc90-mt-gd-1_50.lib'
блин
и что делать? (буст использует луабинд)

UPD: Убрал нафиг вообще эту функцию, всеравно либу буста просит

UPD: Оййой) Поменял название хедера локали и все заработало) Надо бы убрать папку буста из списка каталогов студии))) Вопрос удачно закрыт)


Часовой пояс GMT +4, время: 01:23.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot