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

ABTOMAT 30.11.2008 18:29

Тупые вопросы
 
Такс... добрался я до С++ значить...
Сразу тупые вопросы:

1. Почему вот так катит:

Код:

int IntToStr()
{
    int stroka;   
    return stroka;
}

а вот так - не катит:
Код:

string IntToStr()
{
    string stroka;
    return stroka;
}

2. Как пользоваться в MSVC++ 2005 дебагером? Например:

Код:

int m = MessageBoxA(0,"ЫЫ, "Ы", 48+4);
мне надо остановить прогамму прямо после этой строчки и узнать значенеи m

в Блице всё блин было человекопонятно
Stop после строчки и ищешь переменную в дебаггере
Тут ведь всё не как у людей - куча всего ненужного заняло половину интерфейса, а необходимые вещи днём с огнём не сыщешь (простите, не удержался от выражения своего ИМХО)

johnk 30.11.2008 18:39

Ответ: Тупые вопросы
 
1. В смысле "не катит"?
2. Слева от кода можно расставлять Breakpoint'ы. ( красные овалы :-D )
А дальше гугл.
Ну или: http://www.devdoc.ru/index.php/conte...bugging_p1.htm

jimon 30.11.2008 19:01

Ответ: Тупые вопросы
 
ABTOMAT
1) нету в c++ String как встроенного типа
2) ставишь breakpoint на строчку после нужной
наводишь в IDE курсор на нужную переменную, всплывает окошко со значением

ABTOMAT 30.11.2008 19:20

Ответ: Тупые вопросы
 
jimon
1. Забыл указать: в самое начало cpp-файла сунул вот это:

#include <string>

2. Можно поподробнее как вставить брикпойнт и что это такое?

impersonalis 30.11.2008 22:34

Ответ: Тупые вопросы
 
Цитата:

наводишь в IDE курсор на нужную переменную, всплывает окошко со значением
ещё есть вкладка Watch - там можно бвить имена отслеживаемых перменных, да и по-дефолту есть несколько окон, отображающий пременные по группам (компоненты класса, текущие и т.п.)... ой ил это тока в 6.0 ?

jimon 01.12.2008 00:52

Ответ: Тупые вопросы
 
Вложений: 1
ABTOMAT
breakpoint это тот же stop, только без команд, смотри атач, красный кружок это breakpoint, после этого запускаешь прогу с дебагером, прога вылетит в дебаг на красном кружке, обязательно надо компилировать с дебаг информацией (обычно называется debug)

string не всегда означает строку, пользуйся std::string, это базовая строка из stl (вроде как для неё и есть инклуд string)

ABTOMAT 01.12.2008 01:58

Ответ: Тупые вопросы
 
Спасибо! Но ещё немного нада уточнить:
красный куржочек остановит строку ДО того как она начнёт выполняться, или ПОСЛЕ? Т.е. это эквивалентно стопу в начале строки или в конце?

SBJoker 01.12.2008 10:34

Ответ: Тупые вопросы
 
конешно перед строкой до её выполнения

FDsagizi 01.12.2008 10:36

Ответ: Тупые вопросы
 
ABTOMAT
Вылетает там, где поставил, соотвецтвенно переменная может быть еше не инециализирована, тогда - f10( выполнить код на строку ниже ) или f11( войти в функцию и отследить как она работает ) Shift + f11 ( если зашел в функцию, выйти из неё )

Зы: Изучение с++ лутьше проводить по книжке, ибо это совсем не Байсик, и очень много отличий, прочитав за день 100 страниц книги ты узнаешь больше чем за неделю самоучного изучения методом научного тыка!

Сам изучал По книге "С++ за 21 день". Само оно для чайников, и глупые вопросы про то, что такое std::string или std::list отпадут сами собой.

jimon 01.12.2008 10:49

Ответ: Тупые вопросы
 
ABTOMAT
если поставить на строку, то вылетит перед её выполнением

ps. книжка "C++ за 21 день" рулит для начала :) нормально обьясняются большинство базовых вещей

impersonalis 01.12.2008 16:26

Ответ: Тупые вопросы
 
Цитата:

ps. книжка "C++ за 21 день" рулит для начала нормально обьясняются большинство базовых вещей
ну воот... а я тыкал во многом и учил - по какой придётся литературе

ABTOMAT 01.12.2008 16:26

Ответ: Тупые вопросы
 
Можно посмотреть обложку сей книги? И аффтара?
З.Ы. У меня есть книжка по С++
но только там уже предполагается что читатель уже знает синтаксис Си (не ++) и даётся только в общем, без описания MS VC++ 2005 или других компиляторов
Короче книженция уже для продвинутых
Так шо если советуете этот С++ за 21 день, то постараюсь найти в кн. магазине

IGR 01.12.2008 17:53

Ответ: Тупые вопросы
 
если уж "тупые вопросы" здесь, то и я спрошу !! ;)
Вот как в с++ обменять значения двух переменных не используя третей переменной ??
ДО: а=5, с=10
ПОСЛЕ: а=10, с=5

Спасибо !! :)

jimon 01.12.2008 21:11

Ответ: Тупые вопросы
 
ABTOMAT
http://images.google.com/images?clie...=1&sa=N&tab=wi

IGR
Код:

b = a+b;
a = b-a;
b = b-a;


impersonalis 01.12.2008 22:29

Ответ: Тупые вопросы
 
jimon,IGR
+тема с подобным: http://forum.boolean.name/showthread.php?t=275

ABTOMAT 01.12.2008 23:53

Ответ: Тупые вопросы
 
jimon
гугал я и сам знаю, да все они там различаютсмя, мне же нужна конкретика

jimon 02.12.2008 00:09

Ответ: Тупые вопросы
 
ABTOMAT
у меня такая http://www.williamspublishing.com/Books/ty21_Cpp.html
но о работе с IDE или тонкостями настроек компилятора там ни слова
так же ни слова о солюшенах, проектах и тд

impersonalis 02.12.2008 11:29

Ответ: Тупые вопросы
 
Тоже задам тупой вопрос:
сообщение VC++ в логе отладки "Detected memory leaks!", свидетельствующее об утечке памяти - является чисто диагностическим ("ах-ох! наверно, что-от идёт не по логике программиста") или всё же реально представляет угрозу, и "деструктор приложения" не сможет в Release удалить все динамически созданные объекты?
Ведь если реализуется 2ое - то любое нештаное заврешнеи программы - это срач в память (да получается и штаное - тоже)

IGR 02.12.2008 14:37

Ответ: Тупые вопросы
 
Цитата:

b = a+b;
a = b-a;
b = b-a;
jimon, в лабораторной зделал точно так !! все работает в принципе !! проподавательница сказала что есть другой, "нормальный" вариант !! вот я задумался и спросил здесь !! :)
impersonalis, ненашел !! :(

SBJoker 02.12.2008 14:43

Ответ: Тупые вопросы
 
наверно этот вариант:
Код:

b = a Xor b;
a = b Xor a;
b = a Xor b;


IGR 02.12.2008 21:28

Ответ: Тупые вопросы
 
наверно, но у меня ТС вообще такую команду Хор незнает !! :(

Morganolla 03.12.2008 00:11

Ответ: Тупые вопросы
 
Привет завсегдатаем! Принимайте еще одного тупого! :)
Я недавно осваиваю VC++ и OpGL... У меня вопросик - как принимать в своей проге вращение колесика от мыши? Я пока нащупал ф-ию WM_MOUSEWHEEL. Но не могу найти как определить направление вращения колесика? А? Скинте примерчик...

HolyDel 03.12.2008 00:38

Ответ: Тупые вопросы
 
Morganolla

http://forum.boolean.name/showthread...=WM_MOUSEWHEEL

impersonalis 03.12.2008 00:49

Ответ: Тупые вопросы
 
ап. чо - на столько тупой вопрос?

Morganolla 03.12.2008 00:53

Ответ: Тупые вопросы
 
Спасибо, врубился! (Хотя все как-то криво выглядит) :)

jimon 03.12.2008 15:04

Ответ: Тупые вопросы
 
impersonalis
у меня такой месаги не было просто, есть предположение что после окончания работы твоей проги она не все за собой удалила, потому за ней удаляет система :)

Morganolla 03.12.2008 15:27

Ответ: Тупые вопросы
 
Еще вопросик:
В режиме дебага все компилится и запускается нормально, а в режиме релиза начинает ругаться линковщик на команды OpenGL, например:

error LNK2001: unresolved external symbol __imp__wglUseFontBitmapsA@16
error LNK2001: unresolved external symbol __imp__glGenLists@4
error LNK2001: unresolved external symbol __imp__glDeleteLists@8
error LNK2001: unresolved external symbol __imp__glPopAttrib@0
error LNK2001: unresolved external symbol __imp__glCallLists@12
error LNK2001: unresolved external symbol __imp__glListBase@4
error LNK2001: unresolved external symbol __imp__glPushAttrib@4
...

Не подскажите в чем проблема???

Morganolla 04.12.2008 11:42

Ответ: Тупые вопросы
 
Разобрался, всем спасибо.

IGR 04.12.2008 21:22

Ответ: Тупые вопросы
 
Цитата:

наверно этот вариант:
b = a Xor b;
a = b Xor a;
b = a Xor b;
SBJoker, катит !! :ok:
спасибо !! ;)

impersonalis 04.12.2008 23:32

Ответ: Тупые вопросы
 
2IGR

этот фокус можно проделать на базе любых операторов, удовлетворяющих условию. На сколько я понимаю, условие заключается в следующем:
op(A,B)=C => op(C,B)=A для всех A,B входящих в множество X, для которого опеределён оператор op.
a XOR b = c => c XOR b = a
Если же нет ограниченяи на кол-во операторов, то
op1(A,B)=C => op2(C,B)=A для всех A,B входящих в множество X, для которого опеределёны операторы op1,op2.
4 + 1 = 5 => 5 - 1 = 4
Для последней задчи подоходят аддитивные операторы + -, мультипликативные (с ограничением на возможность реализации бесконечной точности - подбором аргументов, либо использованием аналитического решения):
5 : 6 = 5/6 => 5/6 * 6 = 5
при не выполнении условия результат воздействия первого оператора невозможно сохранить в адекватном представлении 0.8(3).

Если для случая использования одного оператора зафиксировать второй аргумент, т.е. какбы внести его в оператор, то условие приобреатет следующий вид:
Aopa=C => Сopa=A (фиксируем B).
Описанный оператор opa можно рассматривать как некую биекцию R, обладающую свойством симметричности:
aRb => bRa для всех a,b, принадлежащих множеству X, на котором определена биекция R.
Для случая двух операторов, нам понадобяться две биекции (G,D), такие что:
aDb => bGa для всех a,b, принадлежащих множеству X, на котором определены биекции D,G.
собственно при тождестве D=G получаем описанный выше случай для биекции R.
Пусть есть два числа 1 и 2. Зафиксируем число 2, "внеся" (х3 как тралировать этот жаргонизм в приемлимое мат.описание) его в биекцию S, полученную из оператора сложения, получим:
1S3
Возьмём оператор вычитания и "внесём в него" 2 - получим биекцию D:
3D1

Помниться, в какой-то литературе по алогритмике, я читал комментарий к temp-переменной: нельзя поменять местами жидкости в двух сосудах, не используя 3ий.
Опровергнуть сказанное в свете вышенаписанного можно следующим образом:
Числа, кроме всего прочего, характеризуются "весом".
Т.о. аналогия с жидкостями неполна (критично!), если не ввести понятие о плотности жидкостей, причём жидкости с одинаковой плотностью рассматривать как одинаковые (подобно тому как бессмыслена задача по обмену значениями перменных, изначально равных друг-другу).
Введём оператор SUB вычленения из ёмкости жидкости по её весу - аналогично с числовыми операциями (физически 2 жидкости разнйо плотности распредлятся в сосуде одна под другой - так что оператор реализуем на практике).
Введём оператор ADD смешивания двух жидкостей.
Возьмём жидкость (кефир) и менее плотную (вода).
Объединим их простым пермешиванием.
кефирADDвода=бурда
бурдаSUBвода=кефир
если зафиксировать воду, как постоянную составляющую оператора - получим биекции A,S, такие что:
кефирAбурда
бурдаSкефир
Физический смысл биекции А - подлив воды в оперативную ёмкость; S - вычленение одного из (не совпадающего по плотности с водой) двух слоёв, на которые разделится бурда в установившемся режиме.
Так что, автор пособия несколько заблуждался.

IGR 05.12.2008 21:30

Ответ: Тупые вопросы
 
ясно !! спасибо !!
хотя ето все-го лиш лабораторная !!

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

jimon 05.12.2008 21:41

Ответ: Тупые вопросы
 
IGR
шаблон только знает "имя" класса - то которое задаешь в шаблонном описании, обычно T используют
можно приводить типизацию к T или к другому классу который описан как шаблон в нашем шаблоне

зачем тебе конкретно знать что это float - я не имею представления

HolyDel 05.12.2008 21:49

Ответ: Тупые вопросы
 
а почему float, а не, например, double?

IGR 05.12.2008 22:28

Ответ: Тупые вопросы
 
Цитата:

а почему float, а не, например, double?
хз, это я к примеру !!

Цитата:

шаблон только знает "имя" класса
jimon, может я ошибаюсь, ну вот смотри:
когда в функции-шаблоне я плюсую 2 переменных, то програма врядли станет плюсовать int с char т.е. компилятор видит разницу в этих типах переменных !! мне нужно что бы он увидел тип переменной и сообщил об этом пользователю !!

jimon 05.12.2008 22:42

Ответ: Тупые вопросы
 
IGR
ну дык в чём проблемма ? в ХИДЕРЕ ОПРЕДЕЛИ метод класса для определённого типа в шаблоне (определять после шаблона надо)
тоесть ты можешь определить одну функцию по разному для разных типов, к примеру char и для int
для int ты определяешь просто a1+a2, а для char используешь atoi и тд

тут есть пример даже где шаблонный класс определяется для заданного типа

IGR 05.12.2008 22:58

Ответ: Тупые вопросы
 
ну ето немоне то !! :)

по идее у меня должна быть функция WhatIsClass(T x) !!
Потом:
int int_value=34;
char char_string="Skoro_Sessia";
doublу double_value="32654";

Потом когда мы передаем любую из этих переменных у функцию:
WhatIsClass(char_string);
Пользователю должно, допустим высветится на екране:
Char variable !!

Можно ли такое ?? Я тут совсем запутался !! :SOS:

jimon 05.12.2008 23:12

Ответ: Тупые вопросы
 
IGR
ну сделай это как я сказал
а функции такой нету, в принципе в памяти то любая переменная это просто указатель на место где она хранится, про размер или тип ничего не говорится

IGR 05.12.2008 23:19

Ответ: Тупые вопросы
 
jimon, окай !! попробую так !!
Вот еще книжку по ООП докачаю, может сам че придумаю !!
Спасибо !! :beer:

HolyDel 09.12.2008 16:55

Ответ: Тупые вопросы
 
Код:

WhatIsClass(std::string val)
{
cout<<"it's string"<<endl;
}

WhatIsClass(float val)
{
cout<<"it's float"<<endl;
}

WhatIsClass(double val)
{
cout<<"double"<<endl;
}


jimon 09.12.2008 18:50

Ответ: Тупые вопросы
 
HolyDel
тогда уж

Код:

#define __REGISTER_TYPE(_type) char * WhatIsClass( const _type & val ){return #_type;}

__REGISTER_TYPE(double)
__REGISTER_TYPE(int)

...

double lol = 0;
std::cout << WhatIsClass(lol) << "\n";


HolyDel 09.12.2008 19:19

Ответ: Тупые вопросы
 
jimon, можно и проще:
Код:

#include <typeinfo>
#include <iostream>

int main()
{
  std::cout<<typeid(0.11f).name()<<std::endl;
  std::cout<<typeid(0.1).name()<<std::endl;
  std::cout<<typeid(1).name()<<std::endl;
  std::cout<<typeid("BAZOOOKAAAAA!!!!").name()<<std::endl;
}


IGR 10.12.2008 16:47

Ответ: Тупые вопросы
 
Цитата:

#include <typeinfo>
#include <iostream>

int main()
{
std::cout<<typeid(0.11f).name()<<std::endl;
std::cout<<typeid(0.1).name()<<std::endl;
std::cout<<typeid(1).name()<<std::endl;
std::cout<<typeid("BAZOOOKAAAAA!!!!").name()<<std: :endl;
}
вот это то что нужно !!
вот мне это часа 3 назад на лекции прочитали !! :-)
и тут маленький вопрос:
что такое std и зачем оно ??

jimon 10.12.2008 17:04

Ответ: Тупые вопросы
 
IGR
std это пространство имен STL

FDsagizi 10.12.2008 18:29

Ответ: Тупые вопросы
 
Цитата:

Сообщение от IGR (Сообщение 91975)
что такое std и зачем оно ??

Прогая на си два плюса и не зная что такое стд. Это примерно тоже самое что ездить на машине и не знать что такое радиатор:-)

newman 10.12.2008 18:44

Ответ: Тупые вопросы
 
Цитата:

Сообщение от FDsagizi (Сообщение 91979)
Прогая на си два плюса и не зная что такое стд. Это примерно тоже самое что ездить на машине и не знать что такое радиатор:-)

Немного неправильный пример. Ездить на машине, это тоже самое что юзать готовый продукт. Тут правильнее будет такой пример, что ездить на машине и не знать правила, или работать на СТО и не знать что такое радиатор :).

А про std во всех книжках для новичков пишут :)

IGR 10.12.2008 20:50

Ответ: Тупые вопросы
 
я незнаю что это такое потому что незнаю что ето такое !! (рекурсия получилась :-) ) по этому и спросил !! хз...мож де и встречал !!

автомобилисты, ездить на машине, работать на СТО и незнать что такое offtop !! :cool:

Sashka007 23.12.2008 19:38

Ответ: Тупые вопросы
 
Вот установил borland c++ builder 6 и нашел библиотеки directx 9 sdk как ее нормально установить, а то у меня ошибки выдает

jimon 23.12.2008 19:49

Ответ: Тупые вопросы
 
никак, качай теперь microsoft visual studio 2005, или используй opengl

mr.DIMAS 25.12.2008 15:07

Re: Тупые вопросы
 
кто че знает на счет static_cast и dynamic_cast и вообще почему нереально(по крайней мере VC++ ругается) преобразовать float в char?

jimon 25.12.2008 15:38

Ответ: Тупые вопросы
 
mr.DIMAS
1) http://msdn.microsoft.com/en-us/libr...8h(VS.80).aspx
2) потому что float занимает 4 байта, а char только 1 байт
можно преобразовать float в масив char - те в строку

mr.DIMAS 25.12.2008 19:44

Re: Тупые вопросы
 
2Jimon
плиз на конкретных примерах насчет float -> char[]

HolyDel 25.12.2008 20:11

Ответ: Тупые вопросы
 
хм. почему нельзя преобразовать float в char?
Код:

float a = 64.4f;
char b = 0;
b = a;
std::cout<<b<<std::endl;

а это что тогда?

по второму вопросу:
Код:

        char *pc = new char[4];
        memcpy(pc,&a,4);
        std::cout.write(pc,4);
        delete[] pc;


jimon 25.12.2008 20:39

Ответ: Тупые вопросы
 
HolyDel
1) хым ну всё равно не логично
float это переменная с плавающей запятой, char это целое значение
они не связываются логично, к чему не явная типизация ?
притом что будет если приводит к char к примеру число 257.4f ?

2) sprintf больше нравится )

Morganolla 26.12.2008 00:38

Ответ: Тупые вопросы
 
Тут ответ весьма прост: потому что нет однозначного алгоритма преобразовать дробное число в букву!!! На любой дурацкий вопрос - всегда будет дурацкий ответ!!!

HolyDel 26.12.2008 00:42

Ответ: Тупые вопросы
 
jimon, вполне логично. или тебя смущает разный размер типов, занимаемой памяти?
257.4f очевидно превратиться в 1 (или -127).
просто преобразование проходит в два этапа - сначала в просто целое (отбрасывая дробную часть) потом уже в 1байт.

mr.DIMAS 26.12.2008 16:41

Re: Тупые вопросы
 
2Morganolla
бля мне нужна просто преобразование флоата в чар для того чтобы мона было флоат выводить при помощи DrawText(апишная ф-ция).

HolyDel 26.12.2008 16:52

Ответ: Тупые вопросы
 
дык тогда тебе нужно преобразование в char* а не char.

тут кури sprintf.
http://social.msdn.microsoft.com/Sea...y=sprintf&ac=1

Morganolla 26.12.2008 21:18

Ответ: Тупые вопросы
 
2mr.DIMAS
для того чтобы мона было флоат выводить при помощи DrawText - это дружочек не просто :) , а форматируемое преобразование в стринг. Я же говорил, что вопрос - некорректный!

mr.DIMAS 26.12.2008 23:16

Re: Тупые вопросы
 
Спасибо, ребята. Помогло!

mr.DIMAS 27.12.2008 16:26

Re: Тупые вопросы
 
Раз эта тема называется "Тупые вопросы". То вот еще один:
Как в DX9 сделать перемещение объекта под заданным углом? А то перемножением матриц кручения и перемещения не помогает. Плиз ответьте. Оч надо

jimon 27.12.2008 20:45

Ответ: Тупые вопросы
 
хым, ну вектор перемещения множишь на матрицу поворота и добавляешь результат к вектору позиции (вроде как матрицу поворота на вектор перемещения, точно не помню)

mr.DIMAS 28.12.2008 13:02

Re: Тупые вопросы
 
а мона поконкретнее, а то (извини) не очень врубил

jimon 28.12.2008 13:45

Ответ: Тупые вопросы
 
PositionVector += RotationMatrix * MoveVector

mr.DIMAS 28.12.2008 16:09

Re: Тупые вопросы
 
А если матрицами?

Ent->mResult = Ent->mRotation * Ent->mPosition ;
Ent->mResult._11 *= Ent->mScale._11;
Ent->mResult._22 *= Ent->mScale._22;
Ent->mResult._33 *= Ent->mScale._33;
Ent->mResult._41 = Ent->x;
Ent->mResult._42 = Ent->y;
Ent->mResult._43 = Ent->z;

Плиз вот таким раком надо. И еще. Надо чтоб переместил объект под заданным углом в нужную точку,а затем поворачивать от этой точки


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

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