![]() |
Вопрос-Ответ
В коде:
Код:
const char tmp_adr[]="../dat/gfx/menu_0.png"; Код:
tmp_adr[22] - "ММММММММ../dat/gfx/men" Юзаю msvs11. |
Ответ: Вопрос-Ответ
ты залез на память по смещению +22 от начала своей строки
|
Ответ: Вопрос-Ответ
Цитата:
|
Ответ: Вопрос-Ответ
Последняя буква у тебя с номером 20, потом ноль, потом мусор.
tmp_adr[22] - доступ к мусору позади строки. Почему дебагер выдаёт строку трудно сказать должен быть чар. |
Ответ: Вопрос-Ответ
Я ошибся - значение сначала присваивается нормально, потом:
im_f_t = hge->LoadTexture(tmp_adr); И вот тут движок hge вылетает, а в дебаге строка забита мусором. Со стандартными примерами hge тоже самое, так что проблема была в нём. |
Ответ: Вопрос-Ответ
дебаггер выдает строку потомучто ето массив из 22 чаров, а не 22-й чар.
почему то портится память в hge->LoadTexture(tmp_adr); |
Ответ: Вопрос-Ответ
char* tmp_adr = "mytexture.jpg";
im_f_t = hge->LoadTexture(tmp_adr); так тоже валится? или так, смотря че ты там со строкой вытворяешь перед загрузкой.. char *oldname="texture.jpg"; char *newname = new char[strlen(oldname)+1]; strcpy(newname, oldname); im_f_t = hge->LoadTexture(newname); или так char name[255]; sprintf(name,"%s.jpg","texture");//на выходе texture.jpg (динамическое создавание имени файла типа) |
Ответ: Вопрос-Ответ
Цитата:
|
Ответ: Вопрос-Ответ
|
Ответ: Вопрос-Ответ
Цитата:
|
Ответ: Вопрос-Ответ
Поссоны, кто-нибудь сталкивался с ошибкой инклуда sdl в tcc?
Код:
In file included from D:/Dev/sdl/SDL-1.2.15/test/testwin.c:12: |
Ответ: Вопрос-Ответ
мтак и снова проблема...
нужно разделить определенную строку на слова входящая строка string ни как не могу написать разделение :) сам алгаритм известен но доступ к частицам строки организовать не получается с char тож самое кому не лень киньте пример как лучше все это забацать желательно с коментами строка = Код:
man{0,1,2,3} man 0 1 2 3 т.е не по одному символу разделять а n в данном случае { } , |
Ответ: Вопрос-Ответ
На счёт "лучше всего" - вопрос не ко мне. Но я вот как делаю на примере с++ билдера:
Код:
//функция |
Ответ: Вопрос-Ответ
Цитата:
Код:
/* strtok example */ Цитата:
Цитата:
|
Ответ: Вопрос-Ответ
http://ideone.com/ttYDS
Цитата:
|
Ответ: Вопрос-Ответ
Реально ли запилить нечто, имитирующее GOTO? (нужно для транслятора кода, т.е. убогость реализации не важна)
Через ассемблерные вставки, например (на месте goto вызывать jmp, а как узнать адрес куда нужно идти - не представляю) Компилятор - tcc. |
Ответ: Вопрос-Ответ
goto есть в Си. Но если для парсера, то работа с указателями решает: указатели на переменные (в т.ч. массивы) и функции - что ещё надо?
Или поподробней. |
Ответ: Вопрос-Ответ
Цитата:
|
Ответ: Вопрос-Ответ
Есть ли справка для С++ подобная той, какая в Blitz3D? Ну всмысле с разбивкой функций по разделам, описанием ф-ций, а так-же примерами.
|
Ответ: Вопрос-Ответ
Цитата:
|
Ответ: Вопрос-Ответ
привет.
есть обявление класса эфффекта после есть обьявление класса юнита проблема в том, что эффект должен хранить у себя сылку на экземпляр юнита и юнит должен хранить ссылку на эффект как-то так как они могут узнать друг-друга? и каким образом? |
Ответ: Вопрос-Ответ
Effect *fx;
Unit *un; ... fx = new Effect(...); un = new Unit(...); fx->setUnit(un); un->setEffect(fx); ... delete fx; delete un; |
Ответ: Вопрос-Ответ
зашибись, это то что надо, но как это сделать?
ведь когда эффект обьявляется перед юнитом то он не может хранить данные о юните, ибо о существовании такого типа эффекту пока ничего не известно делаю так: #include <effect_int.h> //интерфейс класса #include <unit_int.h> #include <effect.h> //определение класса #include <unit.h> как еще можно сделать? |
Ответ: Вопрос-Ответ
объявления классов сначала, потом их реализация:
Код:
Unit.hpp |
Ответ: Вопрос-Ответ
ругается на переопределение классов(
извиняюсь, привык тупо последовательно инклюдить в главный срр хедеры в которых и описание и определение, а как работать с срр-шниками я без понятия пока получается та же зависимость от последовательности как и раньше так как же дать знать юниту о эффекте и эффекту о юните? |
Ответ: Вопрос-Ответ
Вложений: 1
ох я тебе не всё написал)
см вложения, там полная версия) |
Ответ: Вопрос-Ответ
О БОЖЕ! Работает! Впервые вижу запись типа: "class Effect;", но ОНО работает! С_П_А_С_И_Б_О!
ПС: Бл%№ь, теперь требуется полная переработка проекта -_- |
Ответ: Вопрос-Ответ
Блин, оказалось что у меня куча глобальных переменных, которые блин, используются в многих местах
как теперь быть? например char buffer[2048]; стыреный из сэмплов ксорса - в каждом хедере его добавлять? ну а другие переменные, которые должны быть уникальными - что с ними делать? |
Ответ: Вопрос-Ответ
1) переписать все к чертям
2) сделать файл globals.h в котором будут extern int g_my_global_int globlas.cpp в котором будут int g_my_global_int = 0; во всех cpp-шках включать globals.h |
Ответ: Вопрос-Ответ
глобальные переменные зло, переработай архитектуру пока не поздно
|
Ответ: Вопрос-Ответ
ух ты) спасибо)
еще вопрос: а с "typedef unsigned short int usi;", который почти в каждом файле нужен, что делать? Цитата:
|
Ответ: Вопрос-Ответ
сделать файл типа type.h, написать туда эту строчку и другие подобные и подключать его где надо.
|
Ответ: Вопрос-Ответ
есть две переменные в юнит.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 ' (или приемлемое преобразование отсутствует) что за печаль такая((( |
Ответ: Вопрос-Ответ
Цитата:
Цитата:
нахер ты там эти переменные создал? |
Ответ: Вопрос-Ответ
обьявил и определил игроков в самом конце файлов и работает)
может проект еще в незапускаемом состоянии) и еще: почему нельзя создавать там переменные? |
Ответ: Вопрос-Ответ
можно, но там им не место
|
Ответ: Вопрос-Ответ
ура! запускается! но до конца еще есть куда пилять
вот заинклюдил как обычно очередной хедер/срр-шник, и вот: компилер упорно не хочет распознавать стд::вектор как тип, даже если пишу class std::vector; using namespace std; подкинь какую-нить статью/книжечку где в кратце рассказывается о такой структуре проектов, или напиши что и как, а то еще всю программу закостыляю нафиг, если еще не закостылял блин ( если точнее: хедер: Код:
#ifndef _LOCALE_HPP Код:
#include <pch.h> Код:
#ifndef PCH_H Код:
#ifndef _COM_HPP UPD:: да фиг с этим всем, если надо то могу дать ВЕСЬ исходный код |
Ответ: Вопрос-Ответ
судя по коду уже стопудово закостылял.
по текущему коду: зачем функции extern? она итак всегда extern если не inline. почему название неймспейса написано капсом - капосм пишем дефайны или инлайн функции. где включение pch.h? (оно очевидно должно быть в com.h, но я его там не вижу) ну и явное задание размера массивов в параметрах и членах класса. ты знаешь, что ты не сможешь вызвать функцию передавая ей массив другого (даже меньшего) размера? почитай струструпа. главы 9,23,24. |
Ответ: Вопрос-Ответ
спасибо, почитал )
на счет проблемы: сделал вместо #include <locale.hpp> #include "locale.hpp" и все пошло как надо О_О но есть еще в Локали функция: char * _(char id[64], char * text); так вот, главный срр не хочет распознавать ни неймспейса Локали, ни функции когда я повторно обьявляю эту функцию в главном срр, компилер просит 'libboost_locale-vc90-mt-gd-1_50.lib' блин и что делать? (буст использует луабинд) UPD: Убрал нафиг вообще эту функцию, всеравно либу буста просит UPD: Оййой) Поменял название хедера локали и все заработало) Надо бы убрать папку буста из списка каталогов студии))) Вопрос удачно закрыт) |
Часовой пояс GMT +4, время: 22:15. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot