Это копия, сохраненная 23 мая 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Была извергнуть крестоблядский стих,
Но распугала робких муз подружка,
Мой рифмы храм внезапно навестив.
О горе мне! Желанием объятый,
Дать бой не в силах женскому теплу,
В надежде, что успею к перекату,
Оставил лиру ржаветь в углу.
Мы предавались ласкам до рассвета,
И я в обьятьях юных сладко спал,
Когда ворвался в сумрак кабинета
Владыка духов, мой отец Баал.
Швыряя за проклятием проклятье,
С шелков атласных он меня стащил,
И прокричал, слюной забрызгав платье:
"ЗАЧЕМ ТЫ ЛГАЛ, ЧТО ТРЕД ПЕРЕКАТИЛ?!!"
От жутких воплей одурев спросонья,
Спасаясь от папаши тумаков,
Смятен и наг, свой срам прикрыв ладонью,
Я выпрыгнул в окно и был таков.
Братишки! Умоляю! Пощадите!
Стихи для сотни шапок напишу,
А нет - меня всем тредом обоссыте,
Но бате впредь не жалуйтесь, прошу...
Старший брат: >>723844 (OP)
Предыдущий: >>714898 (OP)
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
- Вопросы по синтаксису идут на хуй
- Лабы идут на хуй
- "Как мне сделать Х на чистых крестах без библиотек" идут на хуй
- Все идут на хуй
- Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
- Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором. - Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментовпростреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства. - Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
-
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы) Название Год Ссылка Бьерн Страуструп Программирование. Принципы и практика использования C++ 2016 https://yadi.sk/i/Yd6KKpLBqJSUr Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela Стивен Прата Язык программирования C++ 2012 https://goo.gl/z7kA8u
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
- Годный блог, в котором все просто и понятно тян не нужны кококок борщ
- Блог с хорошо расписанными фичами новых стандартов
- Краткие описания библиотечных функций и контейнеров - на русском или более подробно на ангельском
- Блог Герба Саттера (на ангельском)
- Блог Скотта Мейерса (на ангельском)
- Блог еще одной тянки, много о Qt и оптимизации (на ангельском)
- Куча других блогов (на ангельском)
- Большой FAQ по C++ (на ангельском)
- Видео с CppCon (на ангельском)
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа | Название | Описание | Ссылка |
---|---|---|---|
Windows | Microsoft™ Visual Studio® | Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда | https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия) |
Все | CodeLite | Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM | http://codelite.org/, "sudo aptitude install codelite codelite-plugins" для установки под *nix |
Все | CLion | IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует | https://www.jetbrains.com/clion |
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>visual studio
При установке тебе дается выбор, что нужно ставить, а что нет. Разве ты там покликать стрелочкой мышки не можешь, братишка?
Двачую.
Но вообще да, она не дает выбрать, на какой диск ее ставить, например. Поэтому становится не очень комфортно, когда нужно поставить с Clang'ом и Android NDK в сумме овер 10 гигабайт на пекарню с SSD.
я не о том, что ставится столько ненужных sdk, я о том, что даже если ставить только C++ без всякого говна, то все равно при удалении останется столько говна вроде фреймворков, sql, и.т.д даже если я их не ставил, поэтому ищу годную иде без мусора
А как же Скотт? Женатый же человек. Хотя он Персефону больше любил, чем жену, судя по количеству их упоминаний в книгах, лол.
А Алиса кодит на жабе?
Еще бы.
по-моему, не взлетело. хотя другие ide у них охуенные
Платно же
It was regurgitate krestoblyadsky verse,
But it scared away the timid musical friend,
My rhymes suddenly having visited the temple.
Oh woe is me! Desire enveloped,
Post a battle can not feminine warmth,
Hoping that have time to re-rolling,
He left to rust in the corner of a lyre.
We indulge in caresses before dawn,
And I'm in the open arms of the young fast asleep,
When I burst into the twilight office
Lord of spirits, my father Baal.
Tossing a curse for curse,
With silk satin, he pulled me,
And he cried, splashing saliva Dress:
"WHY ARE YOU LIED THAT thread rolling stone? !!"
From the eerie cries sleepy stupor,
Fleeing father's blows,
Pulverize and naked, his hand covering her nakedness,
I jumped out the window and was gone.
Bratishki! Please! Have mercy!
for hundreds of caps write poems,
And no - I have all the trade obossyte,
But do not complain Bata continue, please ...
It was regurgitate krestoblyadsky verse,
But it scared away the timid musical friend,
My rhymes suddenly having visited the temple.
Oh woe is me! Desire enveloped,
Post a battle can not feminine warmth,
Hoping that have time to re-rolling,
He left to rust in the corner of a lyre.
We indulge in caresses before dawn,
And I'm in the open arms of the young fast asleep,
When I burst into the twilight office
Lord of spirits, my father Baal.
Tossing a curse for curse,
With silk satin, he pulled me,
And he cried, splashing saliva Dress:
"WHY ARE YOU LIED THAT thread rolling stone? !!"
From the eerie cries sleepy stupor,
Fleeing father's blows,
Pulverize and naked, his hand covering her nakedness,
I jumped out the window and was gone.
Bratishki! Please! Have mercy!
for hundreds of caps write poems,
And no - I have all the trade obossyte,
But do not complain Bata continue, please ...
krestoblyadsky verse
> шапки нет
Ну что за идиот
А если меня только куны жахали в жопу и в рот, как и я их, могу я еще претендовать на право быть программистом или тоже уже нет?
Я тебя не понял
А есть тот тред сохраненный?
>>726978
"Если в стихотворении Твардовского сказано: „Я убит подо Ржевом“, — едва ли стоит предполагать, что я и поэт Александр Трифонович Твардовский — одно лицо. Часто соотношение между автором и субъектом не столь очевидно. Так, известно, что ранние стихи Анны Ахматовой, в которых героиня жалуется на жестокое обращение мужа, подпортили репутацию ее настоящему мужу — поэту Николаю Гумилеву".
Если пишешь программу на C++, то юзаешь std::cout. Если пишешь на C, то printf.
А если аргументировать нормально, а не потому, что так сказал старый бомж?
Тебе надо вывести int a, string s и объект xxx класса YourMomma. Код на C++:
std::cout << a;
std::cout << s;
std::cout << xxx;
Код на C:
printf ("%d", a);
printf ("%s", s.c_str ());
velosipedMommaPrint (xxx);
С кунами можно. Это не считается. Главное, чтобы не тян.
Ты сам-то юзал этот printf? Если допустишь ошибку в формате, узнаешь об этом только в рантайме
И зачем ты это скинул? Я говорю только о cout и printf
Догматизм такой догматизм.
Только зачем putc, лутше уж printf("%x")
Нормальные компиляторы уже много лет как умеют предупреждать о несоответствии аргументов форматной строке.
Я его постоянно юзаю
Вообще, ostream плох тем, что он очень многословен. Сама по себе идея плейсхолдеров в строке для параметров очень классная и было бы охуенно, если бы была нативная поддержка такого средства в языке. Но пока этого нет. По сути, статический анализ в этом плане делает то же, что делал бы компилятор. Но это не отменяет того, что лучше бы это было реализовано в языке.
AIDE, terminal IDE - у них внутре встроенные gcc и javac, есть возможность собирать apk. Только terminal IDE давно не обновлялся, но его исходники доступны, конпелятор там обновить несложно (выдрать из того же AIDE, например).
Как я понимаю, ты имеешь в виду, что ostream это часть STL, и это хуже, чем если бы ostream был реализован прямо в языке. А чем лучше то?
Ну а объект xxx ты все равно не выведешь через printf. Только если отдельно поля.
Было бы лучше, если бы была интерполяция строк прямо в языке. С предупреждениями и ошибками. Т.е. то, что делают статические анализаторы
Я пересел на линукс 1 раз, сделал простенький файл, допустим, test.cpp и тут встал вопрос, а какое расширение делать у скомпилированного файла?
Ну ведь можно создать дружественную функцию для данного класса, чтобы помещать его прямо в поток std::cout.
Вот именно – без доп. усилий ты ни там ни там нихуя не сделаешь.
Чем не угодил?
И правда. То то мне это магическое число знакомым показалось.
http://pastebin.com/WEHEF0GF
При приведении типов будет отброшена целая часть. А здесь просто память интерпретируется по-другому. http://ideone.com/II6CI7
Ебаный стыд.
Вот я не пойму, что должен делать deallocate. Он не должен деструктить объекты, но должен освобождать память. Должны ли до этого эти объекты деструктированы?
Если да, то я просто удаляю потом объекты из вектора? Если нет, то я должен эту память как-то разметить как свободную, но я хз как это сделать кроме как написать в них nullptr. Но тогда к ним доступа уже не будет.
Чет хз. Помогите, пожалуйста!
> Должны ли до этого эти объекты деструктированы
Конечно, если ты усвобождаешь память то должны быть вызваны деструкторы объектов которые в ней находятся, если такие есть.
> эту память как-то разметить как свободную
Ты должен разметить как свободную и таким образом чтобы ее можно было потом использовать для создания других объектов.
Можешь почитать александреску, там в самом начале третья или четвертая глава, он пишет аллокатор. Тебе такую хуйню как у него городить не нужно, так как я понимаю у тебя особых требований к аллокатору нет (он пишет эффективный аллокатор для небольших объектов), но общие идеи у александреску почерпнуть можно, конкретно в той главе, тему пердолинга с шаблонами не стоит вскрывать.
Спасибо.
Ща попробую почитать. Но суть в том что если я эту память освобожу, я даже хз как сделать так, чтобы у меня именно туда можно было записывать потом. Это видимо надо в allocate сделать какой то поиск( но я до сих пор хз как ее тогда обозначить, что она свободная), либо тупо в конец вставлять, но тогда будет фрагментация.
Ну, с этим я согласен.
Правильно делать через memcpy (на крайний случай через union), а не как на пике.
>PCH
КТО БЛЯДЬ ПРИДУМАЛ ЭТУ ХУЙНЮ, Я ЦЕЛЫЙ ЧАС ГУГЛ БОРОЗДИЛ, ФОРУМЫ БЛЯДЬ, ЧТОБЫ ПЕРЕКЛЮЧИТЬ ОДНУ ХУИТКУ, ПОЧЕМУ ОНО ВООБЩЕ ВКЛЮЧЕНО ПО УМОЛЧАНИЮ
Емнип, time_t не предоставляет легальных итераторов, так что нет, наверное. Фактически lower_bound будет работать с любой парой ForwardIterator, между которыми находится отсортированный диапазон, так что можешь написать свой костылик без особых проблем.
может тебе ещё библиотеку vk_api в С++ 21 впилить? вали с моего лампового
Примерно за год с уровня среднестатистического CS-студента, сдавшего первый курс, до джуна на должность, не связанную с жестким rocket science. Но вообще все очень зависит от твоего энтузиазма, наличия свободного времени, условий конкретной вакансии etc.
На младшего тестировщика энивей подойдешь, а дальше можно разбираться постепенно.
А что вообще на джуна нужно знать, есть какой-то усредненный список требований?
а что значит вопросы по синтаксису? ниахота нахуй быть сходу посланым
Так у каждой конторы свои же требования, всем хуй угодишь.
Там MFC надо, а там на 03 стандарте писать; тут на бусте хуярить - а тут POSIX знай.
И чсх такой разброс по требованиям именно у крестов наблюдаю.
Или же не обязательно чтобы все 100% совпадало с требованиями? Все-таки, освоить быстро можно что требуется.
нет, я в предвкушении уже.. давай выливай чё там у тя?
хотя с /dev/video0 меня треда 4 просто дропали а потом отхуесосили и вот я каюсь
Чисто для крестового джуна я не видел универсального списка, правильно анон грит, все очень индивидуально. А вообще - https://www.google.com/about/careers/students/guide-to-technical-development.html . Соответственно, если у тебя говноконтора в мухосрани делай поправку в сторону уменьшения, но не надейся, что будет прямо в разы лайтовей.
>>727984
Ну смари, всем похуй на самом деле, что ты знаешь, важно, чтобы ты обязанности выполнять начал как можно скорее. Если сумеешь понравиться и убедить, что вот прям через месяц все будешь знать, то почему бы и нет, в любом случае никто не вкатывается в первые же дни.
упражнение из кинги Бьерна.Код для поиска повторяющихся слов и написания предложения The cat cat jump.Как работает код с одним словом я понял,но порвался на написании предложении.правильно ли мое утверждение ,что в случае с The cat cat jump тип string прогоняет каждое слово после пробела по очереди?
>если у тебя говноконтора в мухосрани
В моей мухосрани кресты никому не нужны, максимум быдлокодеры на пхп.
А вообще, как оно, блядь? Берут джуна, и сразу же ему говорят - вот это чтобы через неделю было нахуй
А как же изучить ту кодобазу, которая есть, дать время на "акклиматизацию", так сказать?
вот string это киллеробвес массива char.
пробел от другого символа в нем ничем не отличается.
можешь код в ideone залить я поскролю т.к. пока ты сказал что парсинг стринг идет, а как и что не видя код я не могу сказать
>А как же изучить ту кодобазу, которая есть, дать время на "акклиматизацию", так сказать
А как ты собираешься ее изучать, распечатать и читать что ли?
>Алсо, даже на джуновакансии требуют опыт коммерческой разработки, это как вообще понимать?
Это значит, что хотят мидла на деньги джуна.
Примерно то, что тебе дадут за 5 лет профильного образования.
В олдовых конторах обычно приставляют джуна к злому и опытному дядьке, который такому повороту не очень рад. Дальше примерно как в армии - зависит от дядьки и уровня тупости джуна. Будешь бегать за пивом, выполнять грязную работу типа написания тестов или гуя, дядька будет смотреть твой код и говорить, почему он говно, и как надо было сделать. Постепенно градус нарастает, тебе начинают давать несложные независимые задачи, и ты вкатываешься.
В более современных местах, как правило, ты просто включаешься в команду из 3-7 человек, которые работают над какой-то фичей. На первом же МИТИНГЕ вы обсуждаете, какую задачу было бы лучше всего тебе поручить для начала, чего ты умеешь делать, ну и все такое. Дядьку тоже могут назначить, но скорее в форме обращения к нему, если что-то непонятно.
>>728018
ага.понял.так а какая логика действий этого кода в случае с предложением The cat cat jump?каком месте кода первое слово cat уже присваивает имя previous ,а второе слово cat еще current?
то есть cin при написании первого слова cat и нажатии пробела пускает его вниз по коду,оно становится previous пока мы отжимали пробел и писали второй cat,который после нажатия пробела становится curent -идет по коду и сталкивается с совпадением первого слова cat?
вполне для первого часа в C++ норм обьяснение я так думаю, наверное, потому-что
А для себя поставь танки или дотан. Ну или можешь с корешами пивандос глушить и ссать по подьездам.
За кого ты меня держишь. Бака. Это уже моё дело, что мне делать в моё свободное время.
У него код по-другому написан вообще, у меня когнитивный диссонанс случился с этого. Еще и хедер другой. Вот эти его std::cout вместо просто cout это издержки хедера?
Нет, это как раз нормальный код. А ты привык стрелять себе в ногу, добавляя глобальную using-директиву в хэдеры.
Но я не добавляю, кстати. Можешь объяснить че почем? У Страупструпа просто #include "std_lib_facilities.h" и сразу int main() идет. Я видел, как используют using после инклюда, когда гуглил проблему с PCH, но так и не понял, к чему это, а мои поделки работают и без него.
http://pastebin.com/F1JAcuUJ
угу, спасибо.
Есть а, б и с. Если а > б, меняешь их значения местами. Если б > с, меняешь их значения местами. Если новое значение б < нового значения а, меняешь их местами.
Он хочет использовать только то, что известно после третьей главы. Так-то он, конечно, мог sort(etot_vector).
>Я не уверен, что я должен всё это знать на третьей главе
Тернарные операции проходили? Если да, то используй их
в глаза ебусь не увидел про лабы
Глобальный using в хэдере потенциально может повлиять на код других частей программы. Например, если у тебя в одном хэдере using std::vector, а в другом using folly::vector, то при подключении второго хэдера в одном cpp-файле с первым, его директива перекроет первую, получишь трудноуловимые баги. Поэтому в хэдере надо либо явно все квалифицировать через ::, либо писать локальный using внутри класса/функции.
код если надо
char buf[] = "a\nAB\nabc\nABCD\nabcde\nABCDEF";
const char leksem = "\n";
char token1 = NULL;
char next_token1 = NULL;
token1 = strtok_s(buf, leksem, &next_token1);
while (token1 != NULL)
{
token1 = strtok_s(NULL, leksem, &next_token1);
vector<char>p(token1, token1 + sizeof(token1) / sizeof(token1));
cout << " token 1 = " << token1 <<endl;
cout << " p == ";
for (vector<char>::const_iterator cit = p.cbegin(); cit != p.cend(); ++cit)
{
cout << *cit;
}
cout << endl;
фикс
[code]
char buf[] = "a\nAB\nabc\nABCD\nabcde\nABCDEF";
const char leksem = "\n";
char token1 = NULL;
char next_token1 = NULL;
token1 = strtok_s(buf, leksem, &next_token1);
while (token1 != NULL)
{
token1 = strtok_s(NULL, leksem, &next_token1);
vector<char>p(token1, token1 + sizeof(token1) / sizeof(token1));
cout << " token 1 = " << token1 <<endl;
cout << " p == ";
for (vector<char>::const_iterator cit = p.cbegin(); cit != p.cend(); ++cit)
{
cout << *cit;
}
cout << endl;
[/code]
Александреску читай
и хули ты функцию не обьявил? где табуляция?
перезаливай по нормальному.. в питон треде убили бы за табуляцию тя нахер
>и хули ты функцию не обьявил?
Стрток? Она должна быть в стрингах, не знаю почему компилятор на сайте ее не обрабатывает. На моей vs2013 все ок.
https://msdn.microsoft.com/ru-ru/library/ftsafwz3.aspx
>где табуляция?
Что за табуляция?
>Что за табуляция?
\t или кнопка tab
на скрине она сть а в ideone не принёс..
____________________________________________________________
а теперь наводящий вопрос..
что там делает
>return 0;
значение знаешь?
а скобки зачем тут?
и вопрос функции не раскрыт..
на скрине она сть а в ideone не принёс..
Держи
http://ideone.com/9UP4sP
>значение знаешь?
Завершение работы функции и возврат нулевого значения.
Суть не в том что ретурн залез в цикл (я его убрал оттуда бтв), а в поведении вектора. Я его неправильно обьявляю, чтоли?
Ошибка, кстати, пропала почему-то.
@
ПРИХОДИШЬ НА 2Ч, ВКАТЫВАЕШЬСЯ В /pr
@
НА /pr ХУЕСОСЯТ МОЛ /dev/videoХ ДЛЯ ДАУНОВ
@
КАЕШЬСЯ
@
ВЫЛАЗИИТ ЭТОТ ВОТ! >>728323 И БЛЯ! ОН ПРОСТО ВЫБЯДНУЛСЯ И БЛЯ! И СЬЕБЁТ!
@
ПИШЕТ ДЕЙСТВИЕ А ПОТОМ ТО-ЖЕ ДЕЙСТВИЕ ПИХАЕТ В ЦИКЛ БЛЯ!
@
НАХЕР ОН РАБОТАЕТ СО СТРОКОЙ В ВЕКТОРЕ!
@
ВОТ НАХЕР ТАК ЖИТЬ?
скажи просто что ты хочешь.. от векторов. а то бляди пиклерейтед это просто пиздец, зачем тебе размер указателя?
>скажи просто что ты хочешь от векторов
Должны принимать кусок строки из buf, который находится в token1.
>ПИШЕТ ДЕЙСТВИЕ А ПОТОМ ТО-ЖЕ ДЕЙСТВИЕ ПИХАЕТ В ЦИКЛ БЛЯ!
Надо сделать по-другому? Так сразу и сказал бы.
Чего придираться-то к библиотекам и выделением циклов из одной строчки фигурными скобками, если не в них дело.
>НАХЕР ОН РАБОТАЕТ СО СТРОКОЙ В ВЕКТОРЕ!
Потому что по условию в программе надо использовать вектор, а я не ебу куда его еще можно впихнуть в моей реализации.
я пока о кодстайле тебе говорю.. я не вижу твой код т.к. кровь из глаз заливает их
Потому что в примере на мсдн так указано жи.
Другой вариант:
По историческим причинам (см. время создания Си) у неё там внутри статическая переменная с локальной областью видимости используется для хранения промежуточной позиции в строке (именно поэтому передаётся NULL в качестве индикатора, что продолжать надо с прошлого места)(с)
ебанись, че правда все упражнения из книги сделал? нах тебе еще что-то тогда нужно, там же дохуя их
Спасибо большое
можно освоить только какое-то подмножество с++, это займет несколько лет
лучше зубри plain c, года за три можно норм научится
есть ткт но нужен стаж
YobaPacket MomsQueue::front()
{
ScopedLock lock(mutex_);
return *root_->next; //definitely return copy
}
В коде:
YobaPacket packet = queue_.front();
Вопрос: сначала вернётся копия пакета и потом разлочится мютекс или наоборот?
Потому что это официальная рекомендация, и компиляторы такую конвертацию понимают.
фикс в конструкторе
1. Вход в front ()
2. Вызов конструктора ScopedLock
2.1 Захват mutex_ внутри конструктора
2.2 Возврат в front ()
3. Копирование *next в регистр/стек, где должно находиться возвращаемое значение
4. Вызов деструктора ScopedLock
4.1 Освобождение mutex_ в деструкторе
4.2 Возврат в front ()
5. RET в объемлющую функцию
Ну так проверяй сам.
Например, прервавшись подвожу курсор к переменной, он показывал значение.
Когда-то давно. Потом перестал.
Либо ничего не показывал, либо какие-то адреса вместо стоки в QString. Подумал, что что-то поломалось, всякое бывает.
Но сейчас поставил чистенькие Win10, VS2015, CDB x64 из Windows 10 SDK - пикрелейтед курсор не заскринился, но он там.
Даже в Watch не добавляет в этом конкретном случае, а 1 раз добавил строку.
Зачем спрашиваешь если сам видишь что и как там?
У них в последнее время вообще какие-то сплошные проблемы возникают – то регрессия в парсинге кода, то это, то ещё что.
Ну может я что-то не то сделал/поставил. Возможно, раньше я юзал MinGW, а с VS он никогда так не умел. Уже не помню, давно это у меня в первый раз поломалось еще на семерке, а потом я забросил Qt. Удивительно, что до сих пор не починили.
А кроме VS, как я понимаю, ничего не смогу использовать, т.к. мне нужен WebEngine.
Еще в watch он добавил через какое-то время, но нельзя регулировать ширину столбцов, так что не понятно какую переменную наблюдаешь.
> нельзя регулировать ширину столбцов
Разобрался, мож кому пригодится.
На первый взгляд нижние верхние столбцы не связаны, но если порегулировать ширину верхних, то нижние с ними синхронизируются, на какое-то время.
почитай Страструпа
signed это с отрицательной частью
char -128 ~ 127
unsigned это без неё
char 0 ~ 256
также работает с short int
Пишу char(указатель) data = new char[100];
delete data;
И оно сука нормально очищает память. Это законно?
Почему нет? Это UB, оно может и правильно работать, просто никто не гарантирует. Если у тебя CLI то там естественно менеджер памяти сам знает сколько нужно правильно удалить.
Это сообщение сподвигло меня на гугление того, что такое RET
Всегда проигрывал с "delete [] memory". А ведь в malloc и free такой хуйни нет.
Тебе лучше сделать какой нибудь проект, попутно изучая что нибудь еще. Например SQL или многопоточность. Можешь взять примеры отсюда: http://eax.me/programming-language-learning/
Я пытаюсь сделать вот это, надеюсь смысл операции понятен.
Вообще то atoi просто строку преобразует в число напрямую. То есть если у тебя строка str = "123", то atoi(str) вернет число 123 типа int
Ну если ты вводишь конкретно числа, сделай просто cin >> a >> b >> c. Если тебе принципиально нужна строка, то a = atoi(str1.c_str())
Ну да, так более удачно показана работа atoi
>>728685
Спасибо. Попробовал a = atoi(str1.c_str()), но у меня все распидорасило.
Суть в том, что вводятся три string'а, нужно выразить их в числовом значении, переставить местами по возрастанию и вернуть в исходное состояние. Ну, по крайней мере это у меня такой подход к 7 задаче отсюда >>728254, потому что напрямую со стрингами работать не хочет.
Нет, лол. Немного хтмл и жс пробовал и паскаль.
Чтобы ответить на этот вопрос стоит знать, почему вообще появилась форма "delete [] pointer".
Ведь раньше использовали только malloc и free и менеджер памяти определяет границы выделенного блока по начальному адресу.
В C++ так сделать нельзя, потому что помимо обычного освобождения памяти, нужно также вызвать деструкторы всех объектов. И проблема в том, что не всегда можно на этапе компиляции сказать сколько объектов в этом массиве. Например объект массива может быть приведен к объекту обычного указателя. Или, например, операндом delete-expression может выступать указатель на базовый класс объекта из массива. В первом случае можно было бы выкрутиться, спросив размер блока у менеджера памяти, во втором случае можно было бы сохранять в менеджере памяти еще и размер истинного объекта(или их кол-во). Но тогда нужно было бы писать кастомный менеджер памяти и терялась бы совместимость с C. В итоге решили, мол нахуй нужно лучше через 20 лет запилим std::array и на том и порешали.
а ты #include<string> сделал? Просто на скрине не увидел
И поэтому new [] генерит не просто массив объектов, а массив с -1 элементом, в котором хранится его размер. А затем delete[] лезет в этот -1 элемент и вызывает деструкторы.
Кстати, угадаете, что будет, если вызвать delete [] на указателе на базовый класс?
Как у тебя компилится, если нет #include<cstdlib>?
Пруфы? Да ну не может такого быть, пусть они перепилили new, но vld-то похуй вообще, он переопределяет его все равно .
нехуй ему помогать, пускай доки читает.
Можно подумать ты чем-то важным занимаешься тут.
>>728715
В книге про сортировки еще ничего не было.
Там выделяется тривиальный тип, поэтому компилятор не вставляет дополнительный элемент с размером массива.
Ну уж поважнее, чем тем, что ты делаешь.
Генйи врывается в тред. Короче складываешь числа, находишь максимальный, минимальный, средний находишь как разность суммы и маха и мина.
Кусок памяти останется не освобожденной?
По идее vld же отдельно делает проброс new и new []. Откуда ему знать, что там по факту компилятор сгенерил? Он должен увидеть несоответствие своих оберток new [] и скалярного delete и вскукарекнуть. Надо разобраться с этой ситуацией, в общем, а то будет потом, скажем, gcc другой код генерить, и пиздарики всем надеждам на отсутствие утечек.
щито?
Ты не отличаешь new expression от operator new. Первое вызывает оператор и в случае массива генерит дополнительный элемент.
Можно сравнивать, но имея три элемента, нужно еще и переставлять их местами. Я по аналогии с шестой задачей пытаюсь сделать.
>>728725
Да 6 я уже сделал, лол. Спасибо, кстати, >>728266
Зачем тебе C++, если ты занимаешься олимпиадками. Лучше какой нибудь процедурный язык, например C
Я, возможно, туплю сегодня вечером, но не понимаю проблемы. Что поменялось, и как это повлияло на vld? Размещающие операции там и раньше были, не?
А лучше джаву.
Блядь, вот это я тупанул. Срамота-то какая, пиздец. Чаю тебе, братишка.
Не придумывай велосипед. Там в тексте главы есть пример, где наглядно видно, что строки точно так же сравниваются в лексикографическом порядке, как числа, то есть там, где я тебе писал а > b, b > c, a > b эти самые a, b и c меняются с целых чисел на строки и всё. Просто в решении той задачи поменяй int на string и всё.
> Я по аналогии с шестой задачей пытаюсь сделать
Так там абсолютно все тоже самое, тебе только тип в объявлении переменных нужно сменить с int на std::string и все. Если ты все правильно написал в 6 задании то ничего больше вообще менять не надо. Божественная перегрузка функций и операторов все сделает за тебя.
>Что поменялось
Цвет и возможность удалить new[] обычным delete.
>и как это повлияло на vld
теперь я не могу в debug найти где у меня утечка. Студия выбрасывает исключение и стопает работу vld.
>Размещающие операции там и раньше были, не?
хз. Но насильно их использовать до второго обновления никто не заставлял.
Что это за говно?
Блядь, сука, ебануться, пиздец, блядь, нахуй, ебать. Ты, блядь не мог просто ввести ещё одну переменную "хуй" и делать так: хуй = а, а = б, б = хуй? Что это за пиздец? Ну молодца, додумался до такого, я бы в жизни такое не придумал, ебануться просто нахуй, блядь, я животное от тебя, пиздец, блядь, нахуй.
Да, точно, немного остыл, теперь вижу, что это банально и я сам как-то так сделал для эксперимента. Только с целыми его вариант не сработает, кстати.
Вообще такое с xor делают, с суммой и разностью переполнение, а с делением вообще хуйня должна получатся на большинстве входных данных из-за целочисельного деления.
Классика же, иногда на собеседованиях спрашивают, непонятно только нахуя нормальному человеку такое знать. http://ideone.com/FGrBhF
Я додумался, круги эйлера спасли.
Хуле так длинно? a ^= b ^= a ^= b;
Не надо делать свап через xor.
Глянь на вывод асма.
https://gcc.godbolt.org/#compilers:!((compiler:g530,options:'-O3',sourcez:G4ewlgJgBAzg7gQwA4H0AeIBOAKKYB2ALlAGQIA0eRpARlAJQBQA3o1O1AlAHoC8UNANxsOdPp2EdOPfkMYBfRo1CRYiVPiwBbBABtcBYmUqHaDFiNPF+CSdNl26/QsMVAA=)),filterAsm:(commentOnly:!t,directives:!t,labels:!t),version:3
Ну и пример сам.
http://melpon.org/wandbox/permlink/AOMSy2efiSANOrOY
мамкины оптимизаторы SOSNOOLEY
А в чем профит, кстати? Из того, что я выяснил, выходит, что это одна итерация Ньютона. Кармак велосипед изобрел штоле, или там есть какие-то другие идеи?
> А в чем профит, кстати
В скорости. В то время не было ещё йоба-шейдеров как сейчас. Приходилось считать на ЦПУ.
> Кармак велосипед изобрел штоле
Алгоритм был придумал ещё до него, но он видимо тоже смог реализовать его.
Плюсов и навыков рисования хватит, чтобы сделать своих эльфов и чтоб пол экрана не было видно, если в глаз попадут?
Игры пишут на движках, которые, в свою очередь, могут быть написаны на крестах, но писать движок с нуля - это значить в 90% случаев движком и ограничиться.
Полностью зависит от реализации компилятора. Общие идеи:
https://en.wikipedia.org/wiki/Linear_congruential_generator
https://en.wikipedia.org/wiki/Linear_feedback_shift_register
https://en.wikipedia.org/wiki/Mersenne_Twister
В С судя по всему два варианта (из glibc), не знаю какой именно когда используется - возможно по вызова rand() только первый (простой) используется, а второй нужно как-то подругому вызывать:
https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/rand_r.c;h=0611bac0f367c67b565e3e8e13f00b76ddde112f;hb=HEAD
https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/random_r.c;h=3a4a77901b4e005830685524873d2c2c85ac354e;hb=HEAD
В плюсах все немного сложнее, так как с 11 версии добавили <random> с кучей разных генераторов и rand() должен их использовать. Лень рыться в плюсовом коде - можешь сам посмотреть в gcc если нужна именно плюсовая реализация.
Смотри в stdlib.h
Да ну, те же каклы свой x-ray писали с нуля, и сталкер збс получился, особенно для своего времени.
Банально потому что:
а) что в ААА проектах это дешевле, а так же нужна длительная поддержка, запил и выпил фич и багов по любому пуку;
б) в то время как вышел первый сталкер нормальных альтернатив и не было.
А теперь найди первые релизные билды (особенно чистого неба) и поиграй в них. Кол-во багов что по тем, что по текущим временам там было неебическое.
то есть с очередью будет всё ок, можно спокойно в несколько стволов мамашку долбить?
В AAA практически под каждую игру движок перерабатывается так сильно, что от старого ничего не остается, часто с нуля и пишут. Тем более, что писать логику/рендер сразу под конкретную игру гораздо проще, чем универсальный "движок", и для команды профи за полгода написать базу игры с нуля - задача не слишком сложная. А вот внеигровой код: редакторы, скрипты, утилиты всякие - это бывает не меняется годами.
Сасачь, помоги:
Натолкните на мысль, как это решить? С обычными, прямыми линиями, разделяющими четверти, я понимаю как вычислить, а вот, если координатная плоскость повёрнута на 45*, то что делать?
поверни обратно
Проверяй выше или ниже точка чем некоторая прямая с помощью уравнения прямой.
Или поверни систему координат и решай также как знаешь уже.
> Или поверни систему координат и решай также как знаешь уже.
В том-то и дело, что надо именно так. Если поверну, то это уже другая задача будет.
А как такую прямую задать?
Ну что ты тралишь? Я бы не спрашивал совета, если бы знал, как сделать...
Для олимпиадок тебе нужно знать только основные моменты, стандартный ввод/вывод, вектор/массив, циклы, условия. ООП там особо не нужен.
Основные задачи, это типа "есть массив строк, преобразуй их так, чтобы вывести другой массив строк".
Еще сортировки из stl пригодятся.
Кури там где собираешься участвовать, кресты быстрее всех если рассматривать скорость программы и скорость написания этой быстрой программы.
http://acm.timus.ru/help.aspx?topic=cpp
http://codeforces.com/blog/entry/7614
Ввод вывод можно потестить на этом примере:
http://pastebin.com/DpmjHF7C
Это не совсем так. Сортировки, поиск, графы, комбинаторика, вычгем, динамическое программирование и тп.
И еще, если этим заниматься, то только по хардкору и желательно с наставником, иначе ощутимого выхлопа не будет.
Имел ввиду, что из с++. Ты абсолютно прав, на счет теории. Без математики там делать нечего.
Например, для положительных х и у, если x>y, то точка принадлежит А, если нет, то В. Для отрицательных, соответственно С и В. Логика понятна?
И по базам данных подобную, если не сложно. Спасибо.
Нужно таки набить чем-то резюме, чтобы можно было сказать, что я работал с бд вот здеся, с Qt вот здеся, а вот тут еще и апи какой-то хуйни прикрутил.
Если написать какой-то очередной note editor с маркдовном и синхронизацией с гуглдрайвом/дропбоксом (все из перечисленного как раз) - на меня же посмотрят как на ебанутого? Мол, нахуя ты велосипед написал ? Уже есть Evernote гыгы
Двачую. Тоже не мог понять ООП и пилил всё в одном файле. Мне посоветовали покодить на джаве. Написал простенькую игру на libgdx и разобрался.
Ты не поверишь, но я жабоеб.
>>729549
Что там непонятного то? Там же весьма простая и естественная структура, но везде требуют понимания ООП, как будто это что-то невероятно сложное, отсюда у меня возникает подозрение что я чего-то не понимаю.
Добавляй к последнему числу случайную положительную величину, сохраняй в массив. Перемешивай массив.
Заполняешь массив возрастающими числами, возрастание для каждого следующего числа случайное, потом массив перемешиваешь (меняешь местами случайные пары элементов достаточное число раз). Так понятнее?
У меня есть реализация, но довольно глупая. Массив булек можно заюзать.
> возрастание для каждого следующего числа случайное
Таким образом тяжело получить равномерное респределение, если не на кольце делать. А если на кольце - то проебывается неповторимость чисел. >>729622 Наверное оптимальный вариант, если нужный массив значительно меньше от общего количества чисел. Если нужное количество в 2 - 3 раза меньше то лучше наверное просто сделать массив из всех чисел, перемешать его и отобрать нужное количество.
>>729628
Спасибо, попробую. А как получить как можно более рандомное зерно для последовательности? Может, системное время как-то можно использовать?
>>729701
http://pastebin.com/pPqey2LC
Вот тебе код, моя дорогая. srand() не используй, моветон уже шесть лет как.
За такое не обоссут? Не нарушает ли это каких-нибудь постулатов или ещё какой хуйни?
О, отлично, спасибо. А то уже забыл, что real - это тоже числа с плавающей точкой, привык к float и double уже.
Хопкрофт или Ахо. Можешь лекции какого-нибудь универа по теории алгоритмов читануть.
> возвращает false и это всё имея тип float
Она не может возвращать false имея тип float. Возвращается 0.0. Если результатом твоего выражения ноль быть не может то это нормальный подход. Если может то хуита. В любом случае, раз у тебя флоат то лучше возвращать std::nanf("");
Есть dat файл. На 4 позиции стоит 31('1') символ по ASCII. Надо поставить на эту же самую позициию(4) 32('2') символ.
Сам код не работает:
std::ofstream outfile;
outfile.open("file.dat");
outfile.seekp(4);
outfile.write("3",1);
outfile.close();
То есть если файл выглядит так:
1111111111111111
То после работы кода он должен выглядеть так:
1112111111111111
>Если результатом твоего выражения ноль быть не может то это нормальный подход.
В этом то и суть, что может. Хотел этого избежать, но так и не придумал, что вернуть.
>std::nanf("")
Спасибо.
> 0 0 5 0
> 8 5 4 4
> 9 3 5 5
и т. д. В итоге сделал проверку каждого числа как изначально задумывал, а хотел что-то оптимальнее. Но спасибо за генерацию случайной последовательности, сам бы этого точно не сделал.
Нихуя не должно повторялся, ты проебался на каком-то этапе.
Сет в ПРИНЦИПЕ не может допустить повторение чисел
Да, точно, проебался, использовал вектор вместо сета. А что это, этот сет? Я могу его использовать как массив?
Суть в том что учусь Я в шараге, надо сделать курсач (очень примитивный), а в шараге учили билдер 6 (Вместо него планирую использовать GCC/GTK+ 3) базовые примитивы языка я знаю, но думаю инфа не актуальна, благо уже могу в инглиш что поможет быстро обновить знания моего C++. С языком проблем быть не должно а вот с библиотекой - не уверен, под Wayland сильно сложно код писать?
Курсач мой ебаное неюзабельное говно, сделаю как можно быстрее на отъебись, преподша (кек) там нихуя не разберет и уш точно ничего не запустит. По курсачу у меня три вопроса:
1. Какую книжечку\быстрогайд посмотреть для базовых гтк-вейланд примитивов (И отличается ли кодинг под вейланд?)
2. Мне нужно будет вставить математические формулы в интерфейс и хотелось бы сделать это по людски, есть ли в гтк+ что-то вроде MathML или это как-то иначе можно сделать?
3. Какую математическую либу юзать? Я знаю только <cmath> она хоть и сишная и старая но ее более чем достаточно, современный С++ аналогичной библиотеки не имеет чтобы не дублировать вышеупомянутую или имеет?
Раз мне суждено хоть немного программировать на плюсах то Я хотел бы попытатся форкнуть на вейланд божественный оконный менеджер DWM - ничего лучшего с графическими интерфейсами не случалось, он состоит менее чем из 2000 строк, вот только стоет ли пытатся сделать GTK реализацию или к тому времени его уже и так форкнут?
Сможет ли такое быдло как Я номально его написать? Пусть месяц-два времени заберет, если будет юзабелен то выложу на гитхаб может допилят по людски (многопоточность или еще что там нужно). У меня просто такое впечатление что команда разработчиков не собирается в ближайшем будующем его переделывать - что весьма грусно по-моему. Братся за это или по быстрее начинать дрочить жаваскрипт чтобы работать хотябы за еду? У меня такое чувство что время течет сквозь пальци а Я нихуя не делаю.
Суть в том что учусь Я в шараге, надо сделать курсач (очень примитивный), а в шараге учили билдер 6 (Вместо него планирую использовать GCC/GTK+ 3) базовые примитивы языка я знаю, но думаю инфа не актуальна, благо уже могу в инглиш что поможет быстро обновить знания моего C++. С языком проблем быть не должно а вот с библиотекой - не уверен, под Wayland сильно сложно код писать?
Курсач мой ебаное неюзабельное говно, сделаю как можно быстрее на отъебись, преподша (кек) там нихуя не разберет и уш точно ничего не запустит. По курсачу у меня три вопроса:
1. Какую книжечку\быстрогайд посмотреть для базовых гтк-вейланд примитивов (И отличается ли кодинг под вейланд?)
2. Мне нужно будет вставить математические формулы в интерфейс и хотелось бы сделать это по людски, есть ли в гтк+ что-то вроде MathML или это как-то иначе можно сделать?
3. Какую математическую либу юзать? Я знаю только <cmath> она хоть и сишная и старая но ее более чем достаточно, современный С++ аналогичной библиотеки не имеет чтобы не дублировать вышеупомянутую или имеет?
Раз мне суждено хоть немного программировать на плюсах то Я хотел бы попытатся форкнуть на вейланд божественный оконный менеджер DWM - ничего лучшего с графическими интерфейсами не случалось, он состоит менее чем из 2000 строк, вот только стоет ли пытатся сделать GTK реализацию или к тому времени его уже и так форкнут?
Сможет ли такое быдло как Я номально его написать? Пусть месяц-два времени заберет, если будет юзабелен то выложу на гитхаб может допилят по людски (многопоточность или еще что там нужно). У меня просто такое впечатление что команда разработчиков не собирается в ближайшем будующем его переделывать - что весьма грусно по-моему. Братся за это или по быстрее начинать дрочить жаваскрипт чтобы работать хотябы за еду? У меня такое чувство что время течет сквозь пальци а Я нихуя не делаю.
С. Брин и Л. Пейдж – "Гугл". Всегда есть инфа по всем стандартам, фичам, обсосана каждая деталь.
stackoverflow
>кроме больших проектов
2D говно не проблема и на питоне написать. Плюсы в современных играх только в рендере используются.
В глаза ебусь.
>>730034
Ну так тормозить может, оно простое же, легко и на плюсах написать будет.
>>730005
Какие игори то? Игори это сценаристы художники озвучка спецефекты, много чего и даже немного кода. Движки же есть чтобы игры делать, не с нуля же все пишется.
Я вот хуй знает чем может сейчас программист на плюсах заниматся, энтрерпрайзные средней сложности приложения? Микроконтроллеры и автоматизация (это вроде уже си)?
http://www.stroustrup.com/applications.html
http://jabroo.blogspot.ru/2012/08/c-plus-plus-applications-list.html
https://en.wikipedia.org/wiki/Category:Free_software_programmed_in_C++
К русской клавиатуре не привык, месяц без нее и 10 дней без интернета.
Думаю надо дальше инглиш дрочить.
Разработка под виндовс тоже ебаный стыд, но ничего, живут же люди как-то.
Да все зависит от задачи. Если ты пишешь софт для истребителя или для МКС, естественно ты будешь юзать C++.
Адекват в треде
В веб перекатывается всякий софт, который на С++ писали году в 1998-м, а в нулевые произошел перекат на Java и C#, а на С++ остался только по разным недоразумениям. Разного рода бухгалтерия, документооборот и прочие не очень критичные к производительности штуки. Сейчас .NET программисты теряют работу в пользу PHP-макак, а С++ на это все смотрят со стороны.
Остался, никуда не делся, и ближайшие лет 10 не денется, десктопный софт для творчества - аудиоредакторы, видеоредакторы, фотошопы, CADы, и, что важнее, расширения ко всему этому рынку (сколько на рынке аудиоредакторов? Ну штук 10. А плагинов к ним? Сотни). Здесь понятно в чем дело - чтобы обойти конкурентов, софт должен быть быстрым у юзера, ты не можешь сказать "мой софт стоит не $50, а $10, зато ты можешь купить более быстрый комп".
Второй момент - нежесткий реалтайм. Компьютерное зрение, игры, различного рода библиотеки для бэкенда и т. д. и т. п.
С++ когда-нибудь заменит сишечку? Мне кажется странным что не заменил, вроде есть все те-же возможности, даже больше, и обратная совместимость с С, но С никуда не девается уже более 30 лет...
Иди нахуй.
Никуда не девается откуда? Из ардуино?
https://ideone.com/B42lyW
Как мне теперь к этим TextBrowser-ам обращаться? Хочу вывести текст из них в файл.
Где ты выкопал это ископаемое говно? В Qt5 есго нет.
Если глянуть доку - QTextBrowser наследует QTextEdit, а у того есть метод toPlainText().
Это не то, что ты ищешь?
А обращаться к нему то как? В файл я знаю как выводить.
>но С никуда не девается уже более 30 лет
Единственная причина использования Си - это одинаковый лейаут у структур, не зависимо от производителя и опций конпелятора, годно для операционок. В остальном это нищий язык.
Особенно умиляют фанатики, которые в насмотревшись Сишных костылей, уверовали в то, что goto/free и void в высокоуровнем коде это путь к просветлению.
Блеать их даже наистандартнеемшим юник_поентером не переубедить, токуда только берутся такие ослы...
"Почему не лишено смысла писать код на C, а не на C++": http://eax.me/c-vs-cpp/
Прочти эту статью и ты все поймешь, если тебе реально интересно и ты не очередной уебан который хочет просто нести хуйню.
Ну я читал статьи по Python и Boost.Test на русском с сайта ibm. Для начального старта очень неплохо помогли.
>Единственная причина использования Си
В том, что нельзя навелосипедить поверх сишечки сотню несовместимых языков. Нечитаемый говнокод писать гораздо сложнее.
>что goto/free и void в высокоуровнем коде это путь к просветлению
"Высокоуровневый" часто означает намажем абстракций на абстракции, и еще дополнительный слой абстракций в середине не забудем.
Нет ничего предосудительного в низкоуровневых возможностях. Многие ими пользуются, но не все признаются.
Ты забыл п. 5 памятки ньюфагу.
обычно это в макрос еще заворачивают
Неосилятор - человек, отрицающий полезность абстракций в результате сознательного или бессознательного стремления к упрощению и конкретизации собственной интеллектуальной деятельности.
>>730484
Байтоеб - человек, преувеличивающий ценность высокой скорости работы ПО и низкого потребления им ресурсов относительно прочих аспектов разработки (скорость и стоимость разработки, изменяющиеся требования и др.)
Борщехлеб - человек, постоянно пытающийся расставить все точки над и.
Я лучше на жабе перепишу. Там хоть я знаю как это делать. Спасибо.
теорию чисел забыл
Кстати, для олимпиадок java является вполне себе варантом: есть стандартне классы длинной арифметики; и меньше шансов вылезти за пределы массива/обратиться к тухлому указателю, а потом мучительно искать, где же что-то не так.
>к тухлому указателю
У меня знакомые олимпиадники ими пользоваться не умеют. Тухлый они наверно ни разу не видели.
Забавно то, что еще в прошлом году можно было наткнуться на то, что vs2013 не умеет move-ать что-то в std::thread:
http://stackoverflow.com/questions/29820135/mixing-stdmove-and-stdthread-wont-compile
У меня знакомые олимпиадники пишут на паскале и делают структуры бинарных деревьев по значениям (в стиле struct hui { int left, right };).
Так что у тебя ещё не всё так плохо лол.
Ок.
>делают структуры бинарных деревьев по значениям (в стиле struct hui { int left, right };).
Нихуя не понял, объясни.
Выделяешь класс мышкой, тыц. Нажимаешь по нему правой кнопочкой, тыц. Помещяешь указатель в нужное место. Опяь правенькой, тыц. Вставляешь, тыц. И дальше по клавиатуре тук-тук-тук))0)
брысь с программача, бидло. класс скопировать нельзя. а вот инстанс класса можно. откуда вы только блядь берётесь такие?
Бывают даже конструкторы перемещения.
да да да.. накосякил. у меня есть указатель на обьект класса, и мне надо вектор таких наштамповать. сорян за ракование, но ты рак то побольше моего
я меняю в каждом обьекте половину параметров
я пока создал 1 из 100 и там конструктор 2-3 функции на парсинг и в вектор, но сутьв чем.. из 100 обьектов половина вектора не меняется и т.к. обьект класса пустой -- было бы круто его просто скопировать.
>скопировать нельзя
"Класс" скопировать нельзя, дурья башка.
А чтобы объект скопировать - ебашь в классе конструктор копирования.
Иначе конструктор копирования будет сгенерен по умолчанию (и работать будет неправильно, если класс владеет чем-то типо указателей)
В данном случае ХуйСайз - обычный сраный инт, так что тут и дефолтного конструктора копирования хватило бы.
Ну попизди мне тут, для копирования класса есть масса вариантов, начиная от публичного наследования и заканчивая банальными макросами.
Это уже не "копирование класса", а наследование.
Так что "скопировать класс" можно только копипастом.
Так то да. Пример синтетический. Он же потом может напороться, если у него объект сложный.
да бля. я раканул со "скопировать класс", школьник и ссаных тряпок мне дали -- забили.
что ты подразумеваешь под сложностью? у обьекта 3 папы без конструкторов и дальше тупо пикчи и циферки имена в чаре* всё
Кстати, я сегодня проводил ревизию книжек из шапки да-да, ОП тоже не все читал целиком и обнаружил, что русское издание большого Страуструпа которое "специальное" это отвратительное, дурно пахнущее, перепиленное чсвшным отечественным спермохлебом чудовище Франкенштейна, имеющее весьма отдаленное отношение к оригиналу. Поэтому, братцы, НАСТОЯТЕЛЬНО рекомендую при чтении большого Страуса читать либо только ангельскую книжку, либо держать перед глазами обе, иначе потом будете плеваться. ЧСХ, это не относится к Страусу для ньюфагов, он вполне так добротно переведен, отличия минимальны.
>читать либо только ангельскую книжку
Нахуй тогда вообще читать какую-то книжку? вики, гугл + цппреференс - этого хватит за глаза.
Книжки пережиток ранних нулевых, когда интернетов не было, и единственный способ учить погромирование - книжки (html/chm/txt) с диска "погромирование по-русски 7в1"
я тебе описал.
на чем конструктор копирования классов может мне насолить??
>>730888
не скажи.. просто проскролив книжку со всем, я бы знал куда мне копать, а не писал на 2ч
Не совсем так, книжка заостряет внимание на более существенных деталях в ущерб менее существенным. Плюс последовательное изложение и наглядность. К примеру, в книжке тебе скажут, что "const слева от звездочки относится к объекту, а const справа - к указателю", а в стандарте или cppreference разведут бодягу на пять страниц про деклараторы и описание всех крайних случаев. Так что лучше читать скучные доки уже после книги или точечно, а не все подряд. Но это мое имхо, конечно, вполне возможно, что кому-то удобнее сразу.
>или cppreference разведут бодягу на пять страниц про деклараторы и описание всех крайних случаев.
Самое ценное оттуда - это примеры.
Нехуй вообще бодягу читать, просто смотришь в пример и вникаешь.
Мне объяснят, нахуя тот даун использует int для указателей на левое и правое поддерево? Или это такие хэккерские указатели, которые автор почему-то не захотел сделать unsigned?
Не всегда из того, что выводится примером, понятно, что вообще происходит внутри компилятора. Особенно это шаблонов касается.
Я какбе намекаю, что в паскале нету struct, так что тот код буквально понимать не стоит.
да пошел ты. хоть это и 2ч но это единственная норм доска на всей борде. а вы не гоните раков с лабами а гоните меня бля! а я просто учу язык для себя т.к. это интересно. И этот тред создавался для таких вопросов как у меня. бля пиздец ты охуел анон.
Ты уверен, что ты пишешь не на C с классами?
А точно адрес, а не индекс в массиве?
Индекс массива узлов, например.
Это ты тот ебанутый параноик, которому везде, где есть намёк на ООП мерещится жаба?
>>730848
>>730895
>>730897
>>730899
Ахуеть сколько тупых даунов на моём уютном сосаче. Вам конкретно написано:
>>730645
> У меня знакомые олимпиадники пишут на паскале и делают структуры бинарных деревьев по значениям (в стиле struct hui { int left, right };).
> Так что у тебя ещё не всё так плохо лол.
А изначально это был ответ на:
>>730637
>У меня знакомые олимпиадники ими пользоваться не умеют. Тухлый они наверно ни разу не видели.
Пищи для размышлений, надеюсь, вам хватит, дауны.
Ну что же вы, ребята! На стаковерфлоу идти что ли...
Я знаю, что это, но не совсем осознаю практическое применение и привязку к реальной жизни.
Где это можно встретить? И что на эту тему можно почитать (можно ангельский)?
Это бэкэнд для компилятора. Всё, что нужно знать, чтобы понимать нахуй он нужен ирл.
для самых одарённых – для компилятора с LLVM нужно написать просто фронтэнд (транслятор языкнейм -> llvm ir) своего языка, и во уже готов ахуенно оптимизирующий компилятор
Почтать можно гугл, можешь погуглить про Kaleidoscope если хочешь сам писать компиляторы.
90% всей мировой экономики это распил бюджета и боязнь остаться без работы.
Неужели goto/free и ебля с void* интереснее чем абстрактные фабрики конкретных синглтонов?
./configure выполняется нормально. В инструкцие говорят кучу параметров передать, но без них работает так-же как и с ними. Похоже дэфолтные. Поэтому пишу сразу ./configure && make. Конфиг работает хорошо. Мэйк вроде тоже по началу справляется. Вот что пишет http://pastebin.com/tHLERJ43 Потом компиляция прерывается. Жалуется на исходники. http://pastebin.com/JsCsW2bN Пишет не узнал какую-то переменую в конструкторе. Можете посмотреть что там не так? Может с параметром каким-то особым компилировать надо?
>А копирование не будет лишних операций добавлять?
Нет, компиляторы такую конструкцию понимают.
>как проверить знания?
Напиши свои вектор и хэшмеп, не используя стандартной библиотеки. То есть велосипедишь move, remove_reference и т.д. Еще для практики можно запилить свою реализацию std::function.
Это код, специфичный для 32-х битных ieee 754 чисел. Впрочем, его можно модифицировать и для других чисел с плавающей точкой, но особого смысла этом нет - ответ-то все равно приближенный.
Оказалось что чистые данные компиль приводит даже не к char а к signed int инструкцией movzx, в результате чего складываются совсем не те числа, что я ожидал.
>Напиши свои вектор и хэшмеп, не используя стандартной библиотеки. Еще для практики можно запилить свою реализацию std::function.
Допустим запилил свой вектор, мэп, хэш-мэп, фанкшен, не используя стандартной библиотеки и не используя вообще со стороны. Это повысит мою зарплату?
> зарплату
Вопрос был про проверку знаний для ньюфага прочитавшего одну книгу. Какое отношение имеют знания к зарплате? К чему твой вопрос вообще?
Вводим строку с клавиатуры. Надо написать программу которая будет считать кол-во слов которое начинаются и заканчиваются на одну и туже букву.
Натолкните на мысль пожалуйста как это можно осуществить.
бамп
Как ты узнаешь что ответ правильный? Тесты есть?
На каком моменте возникли проблемы?
Рэгекспом, вся логика в 3 строки поместится.
вопрос в том, что нахуй изобретать свой вектор, если он _уже_ есть, вернее _-хХх-_уже_-хХх-_ есть!
Двумерный массив указатель 2 звуздочки наверно надо.
>>731779
нам что, палить тебе ссылки из даркнета? за нами же пативены и кровавая гэбня выедет.
Если я в цикле два раза pop_back, а затем один раз push_back и так пока размер не станет 1 будет ли перераспределяться память?
Не должна. Даже если полностью опустошишь вектор память не освободится, пока не будет вызван shrink_to_fit(). Возможно от реализации зависит.
Стандарт явно описывает все случаи, когда портятся указатели/итераторы вектора. pop_back () среди них нет, поэтому указатели обязаны остаться валидными. Это фактически означает, что переаллокации не будет, хотя формально никто не запрещает реализации stl, например, остановить все прочие треды и полчаса дрочить вектор, аллоцируя и удаляя память впустую, лол.
http://www.cplusplus.com/reference/vector/vector/pop_back/
The end iterator and any iterator, pointer and reference referring to the removed element are invalidated.
Iterators, pointers and references referring to other elements that have not been removed are guaranteed to keep referring to the same elements they were referring to before the call.
Тут наверное Qt не в почете, но всё же.
Кто-нибудь поможет мне разобраться, почему деструктор Application'а не вызывается, хоть он и в QScopedPointer? В то же время, если создавать прсто объект на стеке, то все удаляется прекрасно.
Буду весьма благодарен за помощь.
Люблю двач, он и поможет, и образует, на путь верный выведет. Храни Господь анонов.
Просто всегда так, только слабину дашь и спросишь совета у анонов - сразу разум проясняется.
Ну, все верно. Я, понятное дело, говорю о всех итераторах/указателях, про это отдельный пункт есть в "опасных" методах типа push_back. Последний итератор очевидно портится, ибо именно этот элемент удаляется.
Rubber duck debugging
asm("movl %cs, storage")?
Неподдерживаемая инструкция mov
В книге написано "Нельзя создать ссылку на ссылку" и "Нельзя создать указатель на ссылку".
Пробую:
int a=0;
int &b=&a;
int *c=&b;
Всё скомпилировалось.
Где наеб? Связано ли это как-то с lvalue- rvalue-ссылками?
> int *c
Тип переменной с - указатель переменную типа int (а не указатель на ссылку)
>>732899
> int &d=&b
Тип переменной d - ссылка на переменную типа int (а не ссылка на ссылку)
А разгадка проста - &b возвращает адрес переменной a, так как b (раз это ссылка на а) это синоним a, то и записи &b и &a должны означать одно и тоже. http://ideone.com/QzBzEW
Я не лабодаун, я школьник
[code lang="cpp"]T(()[])();[/code], проблемы?
Скажем, есть две таблицы в SQlite.
На примерах офк, у меня другого сорта данные, но связь такая же.
1 таблица - шкальники
id | имя | id_класс | id_школа
2 таблица - школы
id | адрес | etc
И вот нужно эти данные забить в QTreeView в виде
|
|---шкала 1
| |--шкальник 1
| |--шкальник 2
| |--шкальник 3
|---шкала 45
| |--шкальник 9000
| |--школьник 9228
...
При чем, если вздумается на ходу что-то поменять - изменения в модели должны загоняться в бд.
Я думал сначала тупо взять QSqlQuery прогнать с джойном и кое-как заполнить, но потом их же хуй получится редактировать.
Анон, что мне гуглить? Уже все перерыл, нихуя не выходит. В MVC не посылай, знаком с ним, но ситуация какая-то сложная
Какой нахуй лабодаун? Для своего проекта нужно, пруфануть могу.
А, я забыл, ты из тех безликих долбоебов, которые сюда поизливать желчь заходят. Пошел нахуй, действительно.
> В MVC не посылай
А если пошлю? Делаешь эту хуйню сначала без персистентности. Тоесть полностью реализуешь модель и все нужные операции над ней. Потом в код операций начинаешь добавлять операции над БД. Добавляется/удаляется школьник - добавляешь его в бд, школьник перемещается из одной школы в другую - меняешь ему значение поля со школой и т.д. Оптимальный вариант сразу ORM какую-то накатить.
Я так сначала и думал, но мне сказали, что можно вообще в обход этого всего пойти и натянуть QSqlRelationalTableModel с помощью QAbstractProxyModel, только у меня там не оче получается пока.
А почему пошлёшь-то? Все что в доке по MVC я понял и разобрался со всеми примерами. А на QAbstractProxyModel и примеров-то нету! Вот оно как.
Ну ничего, разберемся
> QSqlRelationalTableModel
Просто дополнительный слой абстракций чтобы с SQL не пердолиться хотябы в простых случаях, суть от этого не меняется.
Только все равно непонятно, мне все равно придется по ходу что-то вручную в SQL пердолить.
Тогда уж блядь оставлю наверное просто QSqlTableModel, Relational мне там вообще не помощник, одно поле с именем все равно нужно ручками тащить как я пони
А вот и нет. Пруф: http://doc.qt.io/qt-4.8/qlist.html#at Вот только хуй знает, зачем они контейнер с константным временем доступа назвали list, лол.
Вот это нихуя себе оказывается. Вот это имена ебать, у меня джава с них.
> контейнер с константным временем доступа назвали list
Вектор уже занят был. А у этого быстрая (в среднем) вставка в начало, небольшие нюансы с выделением памяти, array тоже не сильно подходящее название.
Я про вектор читанул, может что и не понял, но там пишется, что он хранит копии элементов, а list указатели?
Или это кутешный дек?
В питоне тоже листом обозвали.
Да, если только размер не равен или меньше указателя. Получается что в векторе данные расположены рядом (как в обычном массиве), а в листе могут быть разбросаны по всей куче (как в связных листах и подобных структурах) - в некоторых случаях может влиять на производительность (из-за кеша).
$server_seed = "39b7d32fcb743c244c569a56d6de4dc27577d6277d6cf155bdcba6d05befcb34";
$lotto = "0422262831";
$round_id = "1";
$hash = hash("sha256",$server_seed."-".$lotto."-".$round_id);
$roll = hexdec(substr($hash,0,8)) % 15;
echo "Round $round_id = $roll";
переписать на си++ cuda чтобы $server_seed перебирать и найти нужный.
Я поверхностно знаю си++ и php. Основная проблема это cuda.
Подскажите годных книг/мануалов как там сделать цикл в несколько потоков, который будет перебирать
$server_seed хешировать, сравнивать с ответом и т.д.
Я понимаю, что перебор займет вечность времени, но просто хочу попробовать.
Сегодня в хабрагруппе в вк какое-то тело поясняло, что жаваскрипт самый перспективный язык, а на цпп можно написать очень ограниченный спекрт приложений.
в бидоне вектор тоже list-ом назван
Ну же!
Информация к размышлению: весенний апдейт черновика стандарта увеличил его с 1300 до 1500 страниц. Тебе придется как минимум прочитать его, а местами еще и запомнить.
Ну без слез, действительно ограниченный
Простые игры можно писать на чем угодно. Я бы посоветовал для обучения программированию что-нибудь интерпретируемое, вроде питона, а потом уж выбрать язык по душе.
Это называется дек, между прочим. Все равно тупо.
Не всеми. На каждое embedded говно компилятора cpp не найдется. Только C, только хардкор.
Самый последний драфт только по-быстрому глянул. А четырнадцатый обычно и не закрываю, он в фоне висит открытой пдфкой.
А зачем он нужен?
Альсо,ты про в С++?
Поясни за язык, он сложный для человека, который не очень разбирается в компьютерах?
Ты че ебанутый? Для кого cppreference пилят? Это же долго! Нахуя читать формальное описание языка, если ты не пилишь компилятор? Или ты пилишь?
> Поясни за язык, он сложный для человека, который не очень разбирается в компьютерах?
Конечно.
Всё застопорится на указателях, ссылка, выделении памяти и тд.
Затем, что ты, например, хочешь понять, можно ли делать в крестах %хуйнянейм. Ты, понятно, первым делом тестишь ее в студии/шланге, и она вроде работает, но чем более необычная фича, тем более ты хочешь быть уверен, что она разрешена стандартом, и ты не словишь баг из-за UB спустя полгода, когда уже хер проссышь, что ты там написал. Ты, допустим, открываешь Страуструпа в нужном разделе, а там про это вообще нет, или есть, но говорится очень туманно например, часто он пишет undefined, имея в виду implementation defined, типа "char size is undefined". Поэтому проще всего не ебать себе мозги с трактовками, а открыть стандарт и убить неоднозначность в зародыше. Еще есть cppreference, но там имхо ядерные фичи хуже структурированы и разбросаны хуй пойми как.
>>734603
Я пилю stl-совместимую либу, почти такие же требования к деталям нужны.
Каждые полгода в Университете Техаса.
нехуй читать всякое днище
Я тебе больше скажу, даже сишные массивы в C++ мало кто использует. А с появлением std::array это вообще нонсенс. Так что указатель на массив указателей - это то еще днище. Даже в C такой хуйней никто не страдает и все пишут через typedef'ы. Если увидишь такое на собеседовании, можешь смело плевать в лицо уникуму, который это спрашивает.
Во-первых этот шакал на него не похож, а во-вторых это не порно.
Нам уже год, на столько вопросов было отвечено всем ньюфаням, что впору платную подписку организовывать, куча специалистов из разных областей и все на передовой разработки! Так что не стесняйтесь, присоединяйтесь!
https://invite-me-to-2chpr.herokuapp.com/
Not Found
Почему перед названиями слотов ставят on (on_pb_clicked())? Как это расшифровывается?
Изучение теории языков программирования, конструирования компиляторов, преобразований над естественными языками, искусственного интеллекта, матлогики и автоматизации доказательств, функционального программирования, компьютерной алгебры требует знания грамматик. В более технических или коммерческих областях наподобие компьютерной графики, эмбеддеда крудошлепства, веб-макакинга они вряд ли понадобятся, хотя иногда могут. Например, сможешь хуярить сложные регулярки как Г-сподь.
В некоторых областях иногда запиливают свои недоязыки, ориентированные на эти области, либо на решение каких-то узких задач. DSL - domain-specific languages. Никогда не обмазывался, но, думаю, грамматики там используются. И еще это довольно узкая ниша, так что платить там тоже могут весьма щедро.
1. Закрыть глаза и мысленно представить вожделенный пасскод.
2. Сказать в слух "Спасибо Абу!".
3. Досчитать до десяти.
4. Отправить этот пост в любой тред пяти других разделов.
5. Лечь спать. Утром проверьте свой электронный ящик - пасскод уже там!
>>735237
Спасибо, попробую.
Абу, пошел нахуй с пиаром своего днище-раздела. Годный контент на бордах всегда создавался только за счет энтузиазма, а не доната.
А как же легаси? А как же старые библиотеки, которые требуют указатели на функции?
Конечно, в своем коде, который ты пишешь под с++11/14/17 использовать их не стоит, но знать о них как минимум нужно, чтобы не пугаться увидев такие вещи в чужом коде.
Консольное приложение которое считает сумму двух чисел (вводим с клавы).
Необходимо:
Из ГУЙ-ного прилоежния передавать-получать строку в это консольное приложение, при этом не показывая консоль.
Это возможно?
Поместил ее в C:/folder/myprog
После запуска-закрытия - exe файл меняет свой размер и перестает работать. С чем это может быть связано?
Ради интереса накопировал 100 экземпляров своей программы и они ВСЕ увеличили свой размер (на ~200Кб), хотя запускал только один экземпляр. Что за НЁХ?
Винда-8.
я не говорил, что указатели на функции не используют. Я говорил о обычных массивах. Да и никакой вменяемый человек, даже используя С-массив, не писал бы его определение без вложенного typedef'а.
В заголовочный файл:
extern vector<resourse> Resourses;
Теперь в мейне Resourses[0].Drop() вызывается без проблем, автокомплит подхватывает поля класса для любого элемента, все компилится и работает.
Но если вынести вызов в одноименный заголовочному файл, компилятор несет какую-то дичь:
http://puu.sh/oHqTu/81baca6b32.png
Ну и пошел тупняк, ЧЯДНТ?
Есть листвиджет и SQLite таблица. Нужно забить из таблицы данные в виджет, комбинируя инфу с разных столбцов ричтекстом в листвидгет (т.е. напрямую QSqlTableModel юзАть не выйдет)
Я пока вот что придумал: сабклассить листмодель, в ней содержать внутри QSqlTableModel и из нее черпать инфу и возвращать в data().
Так будет ок или нет? Хз просто, моветон ли модель в модель аггрегировать.
Блядь, ну он же тебе человеческим языком выдал, что интерпретировал твою чегототам Resources [0] как объявление массива и охуел от нулевого размера. Просто пиздец, если уж ты пишешь код, то изволь читать сообщения компилятора, а не МАМ У МЕНЯ ТУТ ОШИБКА НА АГЛИЦКОМ ВЫЗЫВАИ ПОГРОММИСТОВ НУ МАМ(((((((. Вообще, телепаты в отпуске, но я сегодня задержался в астральном офисе, так что ГЛЯДИ СЮДА, ЧЕПУШ, вангую причину ошибки даже без твоих исходников: ты, хуиная голова, не подключил из второго заголовочного файла в котором твой псевдовызов Drop() первый файл в котором extern vector.... Компилятор не обладает в отличие от крестоблядков ИТТ навыком телепатии, поэтому он в пределах данного файла не слышал ни о какой переменной Resources. Следовательно, он считает, что это заново объявляемое имя, а [...] после наводит на мысль, что это массив. Массив нулевого размера недопустим, поэтому компилятор испражняется первой ошибкой в твое окошко вывода. Но надежда умирает последней, поэтому он героически продолжает парсинг, но видит дальше точку вместо ожидаемого семиколона, а еще дальше - объявление функции Drop да-да, она тоже не подключилась, в котором ты нагло забыл указать тип возврата. Такую подставу он простить уже не может, ссыт тебе на лицо и прекращает попытки разбора твоего высера.
И да, прочитай какой-нибудь style guide, а то на эти имена просто больно смотреть. Ах, тебе же лень открыть гугол? Ну тогда гляди сюда: AbstractMamka - имя класса, tvoya_mamka - имя переменной, ebalMamku () - имя функции.
Нихуя я не создал, а перечислил сущности как независимые. И вообще никто не мешает инстанцировать абстрактный класс, если у него все виртуальные методы реализованы по дефолту, это не обязательно интерфейс же.
>extern vector<resourse> Resourses;
>extern
у меня за такое на районе убивают.
ты объявил глобальный Resourses, но не определил его, ты его точно определил его и инициализировал в мейне?
а если по сути можно обойтись без extern в проектах. почитай книжек, хотя нет, через годик другой сам поймешь.
Есть форма с компонентом TRichEdit
Как реализовать нумерацию всех строк? как в каком нибудь DE Ставить таймер и вечно обновлять содержимое, ставя перед каждой строкой Номер строки?
Он не сказал, что не определил. Раз у него работало, значит небось в другом .cpp было определение. Совсем без определения могло бы прокатить со встроенным типом, но не с вектором.
Опять пишу не в ту ветку, но вы все же ближе к этой теме.
Правильно ли я понял, что при использовании QXmlStreamWriter нельзя просто так взять тег и перезаписать значения в нем, а нужно переписывать весь файл с нуля?
>не подключил хедер
http://puu.sh/oHuxi/4ee56e7822.png никакого второго хедера нету.
В попытках разобраться, таки неудачно убирал определение вектора из .cpp файла, запутав не только себя. Но, в данный момент первой ошибки нет, а остальные остались неизменны:
http://puu.sh/oHwtB/161bc5d07e.png
>>735456
Пример вызова в мейне:
http://puu.sh/oHw6k/2e078e9c71.png
Как в многофайловом проекте обойтись без extern? Сам не в восторге от этой хуйни, но альтернатив просто не знаю.
>style guide
По мере вкатывания постараюсь исправиться в оформлении кода, просто пока, при оформлении и распределении по файлам, уходит в разы больше времени в поисковиках и попытках разгадать шарады компилятора, нежели при написании кода. Порой спрашиваю себя, а нужно ли оно мне, и не заебенить ли все в одном файле.
Блять, да ты же в глобальном пространстве имен пытаешься делать присваивание. Конечно тебя компилятор нахуй с такими запросами посылает.
Вне функций можно только объявлять и определять переменные, но нельзя писать императивный код, что-то присваивать или вызывать функции.
Если ты хочешь проинициализировать вектор, то делай это в самом начале main'а.
ААа сложна.. дануна.. все работает. Походу жизнь продолжается.
Все же поправь если не прав: extern у объявления вектора в .h говорит искать объявление в одноименном cpp файле(в данном случае). Итого область видимости данного вектора - файлы с объявлением + те файлы, где будет подключен .h с отсылкой на него.
Предположим я инициализирую по твоему настоянию вектор в мейне. Как мне теперь работать с этим вектором в других модулях, без использования extern?
Любая переменная которую ты объявил вне какого либо блока и которая не имеет const модификатора (и его друзей - volatile и mutable) является видимой по всей программе. Но вследствие нюансов архитектуры языка - компилятор обрабатывает по одному юниту (трансляции) за раз (вообще не имея инфы про остальные) и статического контроля - ты должен предоставить ему информацию про эту переменную. В случае функций используется простая декларация - она предоставляет компилятору всю нужную информацию о функции. Переменную нельзя задекларировать подобным образом - так как синтаксис не отличен от объявления переменной. Поэтому используется ключевое слово extern. Указав в объявлении переменной extern - то показываешь компилятору что это на самом деле не объявление а декларация переменной, то-есть ничего создавать не нужно (как при обычном объявлении переменной). А так как компилятор уже имеет всю нужную ему инфу про переменную он может нормально откомпилировать юнит.
> я инициализирую по твоему настоянию вектор в мейне. Как мне теперь работать с этим вектором в других модулях
Ты судя по всему не различаешь (или путаешь) объявление и инициализацию. Если тебе так нужна глобальная переменная ты можешь объявить ее снаружи, а уже инициализировать в main().
Опа ждём.
>extern, как избавится.
ну смотри, если по существу, ты сейчас пишешь в стиле си. можно получать твой вектор в многофайловых проектах другими путями, один из которых передавать по ссылке или указателю в функцию\метод вызываемую в другом файле проекта.
тебе нужно понять, что корень проекта у тебя функция main. все остальные фукнции где бы они не были, вызываются из main или же из других функций которые в свою очередь вызываются... ну ты понел.
разберись с классами, не пиши в процедурном стиле используя кресты, для тебя специально придумали классы. если же что-то передать таким образом невозможно, в крайнем случае используй синглтон.
Давай я тебе открою одну маленькую тайну. Компилятор вообще никакие объявления не ищет. Он берет .cpp файл и компилирует абсолютно ничего не зная о других .cpp файлах. Потом, после того, как все .cpp файлы были откомпилированы, включается линковщик, это уже другая программа, которая берет скомпилированные компилятором файлы, пакует их все вместе и делает из них .exe или исполняемый на другой платформе файл.
Теперь разберемся с объявлением и определением переменных.
Определение -- это когда ты пишешь, например, int x; или vector<resource> Resources; Эта строчка скажет компилятору "выдели память под вектор ресурсов и теперь я буду обращаться к этой памяти по ключевому слову Resources". Теперь в этом .cpp файле ты можешь использовать Resources просто обращаясь к нему по имени.
Как я уже говорил, компилятор компилирует каждый .cpp файл отдельно и он совершенно ничего не знает про то, что творится в других .cpp файлах и какие там переменные определены, поэтому в другом .cpp-шнике ты не сможешь использовать переменную Resources. Если ты в другом файле еще раз определишь ту же переменную, то это уже будет другая переменная с тем же именем и линковщик, когда будет склеивать файлы обругает тебя сказав, что переменная Resources определена и там и там, и что он не знает какую из них использовать. Чтобы решить эту проблему существует механизм, который называется объявление.
Объявление -- это когда ты пишешь extern int x; или extern vector<resource> Resources;. Эта строчка говорит компилятору "Память выделять не надо, просто знай, что где-то в другом файле будет определена переменная Resources, под неё будет выделена память, а пока просто знай, что она существует и обращайся к ней по имени Resources".
И все, теперь компилятор уже в другом .cpp файле будет знать о переменной Resources определенной в другом месте и использовать её, а не создавать новую переменную.
С функциями та же фигня. Есть определение функций -- это когда ты пишешь функцию с её телом, т.е.
void foo()
{
...
}
И объявление функции -- это когда ты пишешь функцию без тела:
void foo();
Все что я писал выше, справедливо и для функций в том числе.
Как я уже говорил, каждая глобальная переменная должна быть определена один раз на всю программу. А объявлений может быть сколько угодно.
Теперь что касается директивы #include. Снова маленький срыв покровов, #include -- это просто copy-paste. Никакой магии. Когда, например, в файле main.cpp ты пишешь #include "myfile.h", препроцессор (такая программулина, которая запускается еще до работы компилятора) тупо возьмет и скопирует содержимое файла myfile.h в файл main.cpp. Вот именно так и сделает, без шуток. Ему наплевать на имена файлов или что-то подобное, он тупо берет и копирует текст из инклюда целиком, а потом уже компилирует.
Вообще инклюды нужны для того, чтобы упростить вот этот процесс объявления и определения переменных. Можно обойтись и без них. Если ты в разных файлах используешь переменную Resources, ты можешь просто в каждом файле написать объявление extern vector<resource> Resources; и использовать его. А в каком-то одном файле (например, main.cpp) его определить, написав vector<resource> Resources; Это будет прекрасно работать.
Но когда у тебя таких общих переменных или функций будет слишком много, ты заебешься повсюду копировать эти объявления. Поэтому люди придумали инклюды. Ты пишешь все объявление в одном файле, называешь его, скажем, myresources.h, и теперь везде, где ты хочешь использовать Resources или какие-то другие общие переменные которые ты туда прописал, ты пишешь #include "myresources.h" и препроцессор просто скопирует все твои объявления в этот файл. Вот так.
>>735723
Декларация и объявление -- это одно и то же.
В русском языке есть слова "Объявление переменной" и "Определение переменной", в английском языке для этого есть слова "Declaration" и "Definition" соответственно.
Давай я тебе открою одну маленькую тайну. Компилятор вообще никакие объявления не ищет. Он берет .cpp файл и компилирует абсолютно ничего не зная о других .cpp файлах. Потом, после того, как все .cpp файлы были откомпилированы, включается линковщик, это уже другая программа, которая берет скомпилированные компилятором файлы, пакует их все вместе и делает из них .exe или исполняемый на другой платформе файл.
Теперь разберемся с объявлением и определением переменных.
Определение -- это когда ты пишешь, например, int x; или vector<resource> Resources; Эта строчка скажет компилятору "выдели память под вектор ресурсов и теперь я буду обращаться к этой памяти по ключевому слову Resources". Теперь в этом .cpp файле ты можешь использовать Resources просто обращаясь к нему по имени.
Как я уже говорил, компилятор компилирует каждый .cpp файл отдельно и он совершенно ничего не знает про то, что творится в других .cpp файлах и какие там переменные определены, поэтому в другом .cpp-шнике ты не сможешь использовать переменную Resources. Если ты в другом файле еще раз определишь ту же переменную, то это уже будет другая переменная с тем же именем и линковщик, когда будет склеивать файлы обругает тебя сказав, что переменная Resources определена и там и там, и что он не знает какую из них использовать. Чтобы решить эту проблему существует механизм, который называется объявление.
Объявление -- это когда ты пишешь extern int x; или extern vector<resource> Resources;. Эта строчка говорит компилятору "Память выделять не надо, просто знай, что где-то в другом файле будет определена переменная Resources, под неё будет выделена память, а пока просто знай, что она существует и обращайся к ней по имени Resources".
И все, теперь компилятор уже в другом .cpp файле будет знать о переменной Resources определенной в другом месте и использовать её, а не создавать новую переменную.
С функциями та же фигня. Есть определение функций -- это когда ты пишешь функцию с её телом, т.е.
void foo()
{
...
}
И объявление функции -- это когда ты пишешь функцию без тела:
void foo();
Все что я писал выше, справедливо и для функций в том числе.
Как я уже говорил, каждая глобальная переменная должна быть определена один раз на всю программу. А объявлений может быть сколько угодно.
Теперь что касается директивы #include. Снова маленький срыв покровов, #include -- это просто copy-paste. Никакой магии. Когда, например, в файле main.cpp ты пишешь #include "myfile.h", препроцессор (такая программулина, которая запускается еще до работы компилятора) тупо возьмет и скопирует содержимое файла myfile.h в файл main.cpp. Вот именно так и сделает, без шуток. Ему наплевать на имена файлов или что-то подобное, он тупо берет и копирует текст из инклюда целиком, а потом уже компилирует.
Вообще инклюды нужны для того, чтобы упростить вот этот процесс объявления и определения переменных. Можно обойтись и без них. Если ты в разных файлах используешь переменную Resources, ты можешь просто в каждом файле написать объявление extern vector<resource> Resources; и использовать его. А в каком-то одном файле (например, main.cpp) его определить, написав vector<resource> Resources; Это будет прекрасно работать.
Но когда у тебя таких общих переменных или функций будет слишком много, ты заебешься повсюду копировать эти объявления. Поэтому люди придумали инклюды. Ты пишешь все объявление в одном файле, называешь его, скажем, myresources.h, и теперь везде, где ты хочешь использовать Resources или какие-то другие общие переменные которые ты туда прописал, ты пишешь #include "myresources.h" и препроцессор просто скопирует все твои объявления в этот файл. Вот так.
>>735723
Декларация и объявление -- это одно и то же.
В русском языке есть слова "Объявление переменной" и "Определение переменной", в английском языке для этого есть слова "Declaration" и "Definition" соответственно.
Сап /pr это моё любимое место в интернетах. И я хотел бы познакомится с годным адекватом-крестоносцем с целью напилить годноты.
Проблема какая : Хочу зелёных клеток на github много много
я собрал конфу из пары анонов чтобы напилить годноты
есть пару человек которые успешно справляются с контентом в годный проект
с кодерами полная жепа. и ищю чувака который будет 1-200 строк в день сможет коминтить и нести свои идеи в проект
____________________________________________________
контакты -- tox 35BA0C3B869A3D30072B553AC278E0AFC65BD8F27294FDAB231C1C7EE7C79568E7DAEA482324 или оставь мыло итт всё расскажу..
P.S.: настоящие люди только в интернете. очень хочу ещё раз убедится в предыдущем предложении
Не GI, а ҐЇЇЇЇЇЇЇЇ.
Делать больше занятым людям нечего, как хуячить по 200 строк в день в твой yet another game engine.
Ну и пиздуй отсюда, клоун. Двести строк ему в день за просто так вынь да положь, вообще охуеть. PM мамкин, тоже мне.
А, я жопой читал. Показалось, что он про "не сработаемся" сказал.
>global illumination
планирую не юзать это и обойтись только картой точечными источниками + отраженный свет на рельефе.
>>736053
я тоже не имею с этого ничего, это просто развлечение.
>обойтись только картой точечными источниками
Ночь, улица, фонарь, аптека,
Бессмысленный и тусклый свет.
Живи еще хоть четверть века -
Все будет так. Исхода нет.
Умрешь - начнешь опять сначала
И повторится все, как встарь:
Ночь, ледяная рябь канала,
Аптека, улица, фонарь.
ну не фонарь, а n фонарей..
да и блики тоже придадут чего-то.
ну я просто хочу гдноты напилить а не кукарекать на 2ч что я капчюю и занят и в случае монетизации игори она пойдет всем разрабам тебе решать пробовать или нет.
А за это спасибо! чайку тебе анон
в планах небыло смотреть в инструкции.
брал всё в лоб в целях портируемости на мипсы и армелы, но стоит поигратся с бранчами на этой фигне
Вопрос: Какую посоветуете книгу по специфике крестов для человека с большим опытом C, Java, Scala (и знанием еще шести языков). На крестах, вроде, неплохо читаю чужой код (не уверен насколько идиоматичный был код, что мне в разное время попадался).
Мне нужно максимально быстро пройти фазу вкатывания и начать лепить продакшн код так, чтобы никто не заподозрил, что я последний раз (кажется безуспешно) пытался изучать кресты лет так 1Х (не будем уточнять) назад.
P.S.: Тред со среды висит неперекатанный, это вообще типично для ОПа? Сколько часов/дней/месяцев это у него обычно длится?
Страуструп "The C++ Programming Language".
Что этот снеьор должен уметь? Я так посмотрел, что область применения многих языков очень обширная и быть шарящим типом во всех этих областях не просто нереально. Так куда теперь идти более перспективно. Вот посмотрел ы кьют - ну это путь просто в гуй, а гуй - на губе хуй, какие там могут быть сеньоры?! Не видел ни одного объявления, чтобы требовался сеньор в области разработки гуев, наверно, это ближе к дизайнерам. Значит от кьюта надо отходить и брать его как дополнительный инструмент.
Даться в сети, бд -а там что, ну написал я обертки для tcp/udp стеков, и что дальше-то? Опять какой-то тупик и дорога не сказать, что бы длинная была. Бд - тут уже пошире область, все же очень много баз данных со своими реляционными подъебками и внутренними особенностями (крипты и прочая хуйня, в которую я особо не вникал).
Графика, вычисления на видеокартах - вроде неплохо, но идти долго, и стоит ли оно того?
Подскажите, посоны, вообще не могу разобраться в себе сейчас. Все это осиливаемо, конечно, при приложении некоторых усилий, но будут ли они стоить разультата?! Что вообще нужно знать и уметь, чтобы ебу дать в начале, а потом в ус не дуть и жить припеваючи, не хочется работать обычным погромистом всю жизнь, ведь я вот смотрел, как в некоторой конторе работали главные инженеры - они были как саппорт для тех, кто по-ниже и делились своим опытом, вот в чем их работа состояла, принимали на оценку результаты и давали добро/браковали результаты - потому что они могут, скилловички, так сказать и это небезосновательно, что в них нуждается та контора.
> Надеюсь 1.5 анона, оставшихся в тонущем, достаточно компетентные.
> Только после бамплимита стали появляться полотна текстов
Вообще не понимаю вопросов. Ты - типок, у которого большой опыт на С, Java, Scala, спрашиваешь как выучить C++? Типа такой опытный, но не шаришь, как новую технологию нужно изучать? Значит не такой уж ты и опытный.
>>735823
>>735723
Доброджвач.. :3
>можешь просто в каждом файле написать объявление extern vector<resource> Resources; и использовать его. А в каком-то одном файле (например, main.cpp) его определить, написав vector<resource> Resources; Это будет прекрасно работать.
И таки работает. За счет понимания дело пойдет легче.
tnx o/
>передавать по ссылке или указателю
С непривычки путаюсь в них, пока стараюсь избегать.
С главным мейн понятно. Печально, что из-за локальных методов всяких window, event, не удается вынести развесистые ветки кода из главное функции, хотя среда и поиск частично решают проблему навигации на "главном поле".
>для тебя специально придумали классы
Там, где классы уменьшают количество кода и упрощают дальнейшее редактирование, по возможности использую их. Вроде как могильные кресты это СВОБОДА ВЫБОРА.
>не пиши в процедурном стиле
>в крайнем случае используй синглтон
Пока, на 2к строках, не понимаю, зачем мне ради небольшого порядка, переписывать и раздувать код. Может позднее придет понимание.
Я не спрашивал "как учить?" (идиотский вопрос).
Я спрашиваю конкретно об отличиях крестов от перечисленных языков и о том какая из книг (перечисленных в ОП-посте или других) лучше всего раскрывает конкретно эту тему, не отвлекаясь на повторение всего, что есть в С и общие рассуждения о ООП и паттернах проектирования. Спрашиваю у тех, кто прочел не одни книгу, понимает их различия и может что-то порекомендовать конкретно для моего случая.
Ой, ну какой случай-то, блядь?! Ты освоил столько технологий и не можешь самостоятельно определиться с литературой? Или для тебя являются загадкой, что нужно найти список фич языка и понять, какие фундаментальные подходы представлены этими фичами? cppreference и в путь.
P.S. Не думай, пожалуйста, что я просто так к тебе тут доебываюсь. Просто выглядит это так, будто ты сильно себя переоцениваешь в профессиональном плане. А когда не осознаешь, что ты нуб, то трудно профессионально развиваться.
>cppreference
Годная вещь. Уже читаю. Но там все вперемешку (как и, наверное, должно быть в справочнике). Где-то половина или третья часть из С. А некоторые базовые вещи слишком сухо описаны. Например, чем template отличается от дженерика в Java. В принципе, наверное, возможно по ней изучить язык (кое-как), но хотелось бы последовательного изложения всех базовых концепций, начиная с того места, где заканчивается C.
>Не думай, пожалуйста, что я просто так к тебе тут доебываюсь.
Норм. Был бы реально нуб, тогда бы напрягся от этого. Согласен на счет опасности собственной переоценки.
Переоценка у меня случилась в том плане, что я возомнил о себе, что с таким опытом, кресты у меня уже "в кармане". Я не заложил в сроки проекта время на изучение ЯП, чувствую, скоро начну выбиваться из графика из-за этого.
Наверни Мейерса "Effective c++" там упор делается на высокоуровневые вещи, шаблоны и прочее метопрограммирование, как раз то, что тебе нужно.
Читай страуструпа, если нужно последовательное описание языка. Везде описывает мотивацию для каждой фичи
ты точно оп? шапка то говно
Есть класс для всяких игровых объектов.
Его конструктор: хуевина(имя, координаты, путь к текстуре).
Класс содержит метод для текстурирования спрайта без конструктора:
http://pastebin.com/TYA8GvTr
Есть вектор объектов:
extern vector<Obj> objects;
Далее проще с кодом и подсветкой:
http://pastebin.com/2Zuhjc0n
Собственно, строка window.draw(objects[0].sprite); крашит приложение, без нее все запускается и рисуется.
При наведении в иде на sprite в
Portal.sprite
и
objects[0].sprite
показывается одно и тоже. В чем может быть причина краша?
зачем пририсовал велик? я ещё не написал его, дурашка!
как вектор инициализируешь? держи указатели на Obj в векторе, а лучше shared_ptr.
да нет, лампово
Определение
vector<Obj> objects;
Сейчас сменил декларацию и определение на:
extern vector<Obj> objects;
vector<Obj> objects;
Начало выдавать error C2228, поправил, вызываю
window.draw(objects[0]->sprite);
тоже самое, ошибок нет, но приложение крашится.
макаба зачем-то скукожила пост %- - - - - - - - - - - -- - - - - - - -- - - -- - - - - - -- - - -%%
Нихера не понял. Создавай так:
// header
Game()
{
Game();
std::vector<Obj> _gameObj;
}
// cpp
Game::Game()
{
_gameObj.emplace_back(Name, X, Y, Z, Path);
}
Понял. Ты память под вектор не выделил.
std::vector<Obj> _gameObj(10); // 10 игровых объекта
Почитай книги из шапки.
>Game()
>{
>Game();
>std::vector<Obj> _gameObj;
>}
Что это?
>>736603
Исполняемый собирается без ошибок, при запуске закрывается без объяснений.
>>736604
>Ты память под вектор не выделил
выделял:
objects.reserve(9000);
На всякий, с указателями попробовал и так:
vector<Obj*> objects(9000);
Ничего не меняется.
>>736590
Только сейчас заметил, теперь исполняемый крашится даже от присваивания через
objects[0]->x = 64;
т.е. раньше с objects[0].x = 64; программа не закрывалась.
Нафига сейчас эта запись через указатели?
Если убрать всякие objects[0]-> и рисовать через конструктор, то
window.draw(Portal.sprite);
По прежнему рисуется без проблем.
Пока гляну книгу, может пояснит за указатели(от которых пока больше проблем, да и синтаксис через -> как-то не радует)
>Game()
>{
>Game();
>std::vector<Obj> _gameObj;
>}
Что это?
>>736603
Исполняемый собирается без ошибок, при запуске закрывается без объяснений.
>>736604
>Ты память под вектор не выделил
выделял:
objects.reserve(9000);
На всякий, с указателями попробовал и так:
vector<Obj*> objects(9000);
Ничего не меняется.
>>736590
Только сейчас заметил, теперь исполняемый крашится даже от присваивания через
objects[0]->x = 64;
т.е. раньше с objects[0].x = 64; программа не закрывалась.
Нафига сейчас эта запись через указатели?
Если убрать всякие objects[0]-> и рисовать через конструктор, то
window.draw(Portal.sprite);
По прежнему рисуется без проблем.
Пока гляну книгу, может пояснит за указатели(от которых пока больше проблем, да и синтаксис через -> как-то не радует)
есть вложения инклудов:
lib3 -> lib2 -> lib1;
в lib3 находится class3, lib2 - class2;
мне нужно сделать методы class2 доступными class3 через френдли, но при компиляции происходит ошибка, мол, lib3 ничего не знает про lib2;
как это грамотно реализовать?
Я никого ничего не заставляю.
А что плохого в >РЕЗЕРВИРОВАТЬ ПАМЯТЬ ДЛЯ ВЕКТОРА
Почему бы за один раз не аллоцировать столько памяти, сколько нужно? Тем более он точно знает сколько у него объектов.
Каждая либа должна делать свое дело независимо от другой.
Тут, априори, не очень хорошая архитектура.
Переделывай.
Окей, тогда поставлю вопрос так:
У меня есть ебучий сервак, на котором я запиливаю мультитрединг, естесственно, описание класса треда должно быть в отдельной либе.
Я запихиваю в статические поинтеры либы треда нужные контейнеры и прочее.
Теперь нужно допилить еще и вызов методов самого сервака, во время выполнения треда.
http://www.bogotobogo.com/Qt/Qt5_QTcpServer_QThreadPool_Multithreaded_Client_Server.php
Да, я пишу это говно на кьюте, можете обоссать. Да, кьютоблядь - не человек, не могущий в основы.
Статю просмотри, мне нужен мультитрединг на сервере.
После обработки сигнала incomingConnection(qintptr SHandle)
По статейке должен запускаться отдельный тред в пуле.
Пишу реализацию треда - тред должен обрабатывать входящие данные сокета, окей - добавил статическийй поинтер на структуру изеров. Теперь мне нужно вызывать методы самого сервера, как это сделать грамотно.
Спасибо, Абу!
>Теперь мне нужно вызывать методы самого сервера, как это сделать грамотно
Берешь и вызываешь метод, в чем проблема то, я не понимаю?
Экземпляры обработчиков, которые в тредах - не знают как найти сервер? Ты не можешь им передать указатель на сервер?
Чтобы не было реаллокации, это дорохо.
>Ты не можешь им передать указатель на сервер?
ДАА
ПОТОМУ ЧТО Я НЕ МОГУ ОБЪЯСНИТЬ КЛАССУ ТРЕДА О ТОМ, ЧТО СУЩЕСТВУЕТ КЛАСС СЕРВЕРА, ПОТОМУ ЧТО ОНИ НАХОДЯТСЯ
>lib3 -> lib2 -> lib1;
>в lib3 находится class3, lib2 - class2;
Я ваще не понял, нахуй тебе класс треда?
Ты че, от QThread наследовался? Коль так - то нахуя?
Что мешает тебе сделать
class MyServer;
class MyClient: QObject {
.....
};
>нахуй тебе класс треда?
Эмм.. делал по примеру, я же говорю делал по статейке
сервер наследован от QTcpServer, в классе сервера есть указатель QthreadPool; при срабатывании incomingConnection() - происходит примерно следущее (ПО СТАТЬЕ, Я НЕ ЗНАЮ ПРАВИЛЬНО ЛИ ЭТО ДЕЛАТЬ В СЕРЬЕЗНЫХ ПРОЕКТАХ)
void SERVER::incomingConnection(qintptr SHandle) {
Runnable *task = new Runnable();
task->setAutoDelete(true);
task->socketDescriptor = handle;
pool->start(task);
qDebug() << "Pool started";
}
Получается, что сам тред должен быть классом. Вот и пилю. Я бы с радостью просто передал классу треда указатель на инстанс сервера и все. Только я не знаю, как объяснить ему что такой класс существует
>Только я не знаю, как объяснить ему что такой класс существует
Но я же выше написал, блять!
В хедере клиента - выше пишешь class MyServer;
В его цпп - делаешь инклуд.
И передай классу указатель. Или заебень сервер синглтоном - в Qt даже средства для этого есть, правда сходу не вспомню - какой-то макрос и класс.
Блять, да ты своему классу можешь даже скормить указатель на QObject своего сервера - чтобы дернуть его методы даже кастовать к нужному классу необязательно - были бы они слотами.
Для того чтобы сделать класс другом достаточно его декларации. В хедере третьего класса делаешь forward declaration второго. В файле реализации третьего класса инклюдишь хедер второго класса. Если у тебя в хедерах реализация, то ты скорее всего соснул.
Чего ты несешь? Где в стандарте написано про array указателей? Что это за бред?
Тредик скатился в говно.
список инициализации
Идиот? Идиот.
Окей, я сделал как ты говорил, добавил
class Connection;
class SERVER;
в runnable.h
Ошибка.
error: invalid use of incomplete type 'class SERVER'
^
Я не знаю в чем постановка вопроса НО
Зачем ты добавляешь лишний уровень абстракции? Не логичнее просто class Server: QRunnable?
К чему этот класс пустышка с агрегацией сервера, которая вызовет ряд проблем ?
Можно
Но я хочу так
Как мне объяснить классу Runnable, что существует класс сервер? Я думал это тривиальная детская задачка, а тут, оказалось, есть проблемы с этим
>кьютоблядь - не человек
Я что-то прослоупочил, а на чем бояре рекомендуют писать кроссплатформенные GUI, которые бы выглядели не как школьная говноподелка и не как творчество бородатого аутиста, которым могут пользоваться только только такие же аутисты?
Очевидное гуиблядь - не человек
Потому что плюсовик, пишущий на кьюте не проходит ту боль, которую ощущает любой другой. В кьюте все до охуения просто
Разобрался. Там свои тонкости. Пришлось писать реализацию метода Runnable в самом server.cpp.
Но зато все работает.
const string s = "Sap /pr";
for (auto &c : s){ /... / }
Написано, что для c выводится тип const char&. Почему? Разве auto не отбрасывает const? Или при амперсанде в деклараторе это будет low-level const?
И еще: тут s типа const string. В объектах типа string символы наверное хранятся как char массив или что-то типа того, а если это const string объект, то по идее как const char.
Вопрос: каким образом при создании const string объекта внутри него char преобразуется в const char?
Лол, а как ты себе представляешь константную строку, не с константными чарами?
Вот поэтому и спрашиваю с помощью какой магии char преобразуется в const char.
char(звездочка) и const char(звездочка)
ничего никуда не преобразуется
когда ты пишешь класс string, ты внутри заводишь поле char *.
Когда ты создаешь константный объект типа string, то все поля внутри этого объекта становятся константными, а все функции, которые меняют состояние объекта, т.е. не помеченные как const (за исключением конструктора) не допускаются к вызову
Решил попробовать разобраться с отладчиком в mvs, часок подключал зависимые библиотеки, по итогу графическую хуевину с хулоувордом отдебажить удалось. Но на другой код в 40к символов всплывает:
Необработанное исключение по адресу 0x779C016E (ntdll.dll)
Первый этап обработки исключения по адресу 0x779D22B2 (ntdll.dll) в Debug1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000004.
гугл ведет на всякие "найдите ошибку в лабе", но у меня то релиз нормально компилируется и заводится. Как понять в чем вообще дело?
Спасибо, рисуется. Можешь объяснить, почему не работает другой вариант?
Для наглядности http://ideone.com/51R2v5
Пытаюсь удалять через removeRow(int row) - почти все строки удаляются, кроме одной двух. Например, если поставить во-вторую колонку 4 - строка не удаляется, а поставишь 1 - удаляется. КАк это работает - в толк не возьму, primaryKey возвращает первую колонку, как и надо. Пиздос, в общем.
http://pastebin.com/mdvHVqrP
Кто-то может пояснить, че тут не так-то?
Я тут за структуры хотел бы поинтересоваться.
Есть такая хуйня:
http://pastebin.com/5VVA65ic
33 и 34ая строка - уже сделал отдельную переменную, один хуй не понимаю в чем проблема.
Есть два вектора, которые держат две технически идентичные (но разные для восприятия) структуры.
Забиты в одном файле, если важно.
Выделяю под них место, получая инфу с базы.
Для первого - все проходит нормально - приходит значение "4", на "4" и расширяется.
Со вторым все идет через хуй пойми как. Он выбирает даты. Даты выбираются как обычно для qDate (daysTo) - значение "1" - все ок, capacity == 1
Но если значение больше 2 - начинается пиздец.
В функции и в конструкторе выводится "2" - он генерит "4"
В функции и в конструкторе выводится "32" - он генерит "41"
В чем беда - вообще хуй знает. Объявлены глобально в хедере, без указателей и переобъявлений - проверил.
Куда еще можно копнуть? Кроме ассистанта
вводим кол-во предметов, вместимоть рюкзака, ценность предмета, вес предмета
И код вроде бы работает, но хреново. То есть при вводе кол-во предметов - 3, вместимость - 50, дальше ценность и веса предметов 60-20, 100-50, 120-30 код пашет, но если вбить например 1 предмет, вместимость 1000, и ценность с весом 500-30, то выдает нечто рюкзак превышающее, а если вбить так же 1 предмет, вместимость 10, стоимость-вес 500-30 выдает нуль, понять не могу где налажал
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
using std::vector;
double get_optimal_value(int capacity, vector<int> weights, vector<int> values, int n) {
double value = 0.0;
int* array = new int[capacity+1];
array[0] = 0;
for(int i=1; i<=capacity; ++i) {
array = array[i-1];
for(int j=0; j<n; ++j)
if (weights[j]<=i)
array = max(array, array[i-weights[j]] + values[j]);
}
int maxCost = array[capacity];
delete[] array;
return maxCost;
return value;
}
int main() {
int n;
int capacity;
std::cin >> n >> capacity;
vector<int> values(n);
vector<int> weights(n);
for (int i = 0; i < n; i++) {
std::cin >> values >> weights;
}
double optimal_value = get_optimal_value(capacity, weights, values, n);
std::cout.precision(10);
std::cout << optimal_value << std::endl;
return 0;
}
вводим кол-во предметов, вместимоть рюкзака, ценность предмета, вес предмета
И код вроде бы работает, но хреново. То есть при вводе кол-во предметов - 3, вместимость - 50, дальше ценность и веса предметов 60-20, 100-50, 120-30 код пашет, но если вбить например 1 предмет, вместимость 1000, и ценность с весом 500-30, то выдает нечто рюкзак превышающее, а если вбить так же 1 предмет, вместимость 10, стоимость-вес 500-30 выдает нуль, понять не могу где налажал
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
using std::vector;
double get_optimal_value(int capacity, vector<int> weights, vector<int> values, int n) {
double value = 0.0;
int* array = new int[capacity+1];
array[0] = 0;
for(int i=1; i<=capacity; ++i) {
array = array[i-1];
for(int j=0; j<n; ++j)
if (weights[j]<=i)
array = max(array, array[i-weights[j]] + values[j]);
}
int maxCost = array[capacity];
delete[] array;
return maxCost;
return value;
}
int main() {
int n;
int capacity;
std::cin >> n >> capacity;
vector<int> values(n);
vector<int> weights(n);
for (int i = 0; i < n; i++) {
std::cin >> values >> weights;
}
double optimal_value = get_optimal_value(capacity, weights, values, n);
std::cout.precision(10);
std::cout << optimal_value << std::endl;
return 0;
}
зачем вообще эта функция? В чем логика одновременно отправлять и вес и емкость?
я 4ый
>>737873
>double get_optimal_value
>return maxCost;
>return value;
вот тут вроде норм код для рюкзака, но не всюду может компильнутся. Чет лажу найти найти не могу
Что значит "не всюду может компильнутся", конкретно что за ошибка/что не так?
Сформируй нормальный вопрос в не утонувшем треде ( https://2ch.hk/pr/res/736493.html (М) ), в одном том треде вероятность найти ответ будет намного выше нежели в двух тонущих.
и пикчу ашел под 666.. ай
А у Страпструпа прикольно, 84 страницы просто идет вступление.
Это копия, сохраненная 23 мая 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.