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)

Nerd 06.07.2012 22:23

Ответ: Вопрос-Ответ
 
Реально ли запилить нечто, имитирующее GOTO? (нужно для транслятора кода, т.е. убогость реализации не важна)
Через ассемблерные вставки, например (на месте goto вызывать jmp, а как узнать адрес куда нужно идти - не представляю)
Компилятор - tcc.

impersonalis 06.07.2012 22:39

Ответ: Вопрос-Ответ
 
goto есть в Си. Но если для парсера, то работа с указателями решает: указатели на переменные (в т.ч. массивы) и функции - что ещё надо?
Или поподробней.

Nerd 06.07.2012 22:46

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

goto есть в Си.
Упс, не знал. :@

Crayzi 17.10.2012 02:04

Ответ: Вопрос-Ответ
 
Есть ли справка для С++ подобная той, какая в Blitz3D? Ну всмысле с разбивкой функций по разделам, описанием ф-ций, а так-же примерами.

jimon 17.10.2012 02:18

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

Сообщение от Crayzi (Сообщение 240467)
Есть ли справка для С++ подобная той, какая в Blitz3D? Ну всмысле с разбивкой функций по разделам, описанием ф-ций, а так-же примерами.

http://www.cplusplus.com/

ANIK123 19.10.2012 23:01

Ответ: Вопрос-Ответ
 
привет.
есть обявление класса эфффекта
после есть обьявление класса юнита
проблема в том, что эффект должен хранить у себя сылку на экземпляр юнита и юнит должен хранить ссылку на эффект
как-то так
как они могут узнать друг-друга? и каким образом?

den 19.10.2012 23:05

Ответ: Вопрос-Ответ
 
Effect *fx;
Unit *un;
...
fx = new Effect(...);
un = new Unit(...);
fx->setUnit(un);
un->setEffect(fx);
...
delete fx;
delete un;

ANIK123 19.10.2012 23:17

Ответ: Вопрос-Ответ
 
зашибись, это то что надо, но как это сделать?
ведь когда эффект обьявляется перед юнитом то он не может хранить данные о юните, ибо о существовании такого типа эффекту пока ничего не известно
делаю так:
#include <effect_int.h> //интерфейс класса
#include <unit_int.h>
#include <effect.h> //определение класса
#include <unit.h>
как еще можно сделать?

den 19.10.2012 23:29

Ответ: Вопрос-Ответ
 
объявления классов сначала, потом их реализация:

Код:

Unit.hpp

#include "Effect.hpp"

class Unit
{
public:
    void f(int x);
protected:
private:
    Effect *fx;
};

-----------------------------------

Unit.cpp

#include "Unit.hpp"

void Unit::f(int x)
{
  ...
}

-----------------------------------
где-то в main.cpp

#include "Unit.hpp"
#include "Effect.hpp"
...
Effect *fx;
Unit *un;
...
fx = new Effect(...);
un = new Unit(...);
fx->setUnit(un);
un->setEffect(fx);
...
delete fx;
delete un;


ANIK123 20.10.2012 00:06

Ответ: Вопрос-Ответ
 
ругается на переопределение классов(
извиняюсь, привык тупо последовательно инклюдить в главный срр хедеры в которых и описание и определение, а как работать с срр-шниками я без понятия
пока получается та же зависимость от последовательности как и раньше
так как же дать знать юниту о эффекте и эффекту о юните?

den 20.10.2012 00:41

Ответ: Вопрос-Ответ
 
Вложений: 1
ох я тебе не всё написал)
см вложения, там полная версия)

ANIK123 20.10.2012 00:54

Ответ: Вопрос-Ответ
 
О БОЖЕ! Работает! Впервые вижу запись типа: "class Effect;", но ОНО работает! С_П_А_С_И_Б_О!
ПС: Бл%№ь, теперь требуется полная переработка проекта -_-

ANIK123 20.10.2012 19:41

Ответ: Вопрос-Ответ
 
Блин, оказалось что у меня куча глобальных переменных, которые блин, используются в многих местах
как теперь быть?
например char buffer[2048]; стыреный из сэмплов ксорса - в каждом хедере его добавлять? ну а другие переменные, которые должны быть уникальными - что с ними делать?

HolyDel 20.10.2012 19:43

Ответ: Вопрос-Ответ
 
1) переписать все к чертям
2) сделать файл globals.h в котором будут
extern int g_my_global_int
globlas.cpp в котором будут
int g_my_global_int = 0;
во всех cpp-шках включать globals.h

den 20.10.2012 19:58

Ответ: Вопрос-Ответ
 
глобальные переменные зло, переработай архитектуру пока не поздно


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

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