Использую CodeLite. Написал программу (эхо сервер вебсокетов), и когда я ее открываю в самом CodeLite, она запускается, а когда я открываю исполняемый файл сам, то вылезает ошибка libgcc_s_seh-1.dll не найден и т.д. Вопрос: в чем блять разница между тем что я просто жму RUN в CodeLite, и открываю exe файл своими кривыми ручками? Между тем, скачал я эту dll, закинул ее, и выходит ошибка при запуске приложения (0xc0000007b).
Между RUN и запуском руками разница в working directory, в которых ищется дллка. а ошибка - хуй знает вообще почему, может АБИ не то, может либа не той версии.
>>1129289 > c++ > windows > codelite > mingw Раз уж решился писать на крестах под виндой, так скачивай visual studio, для винды лучше нее пока что ничего не придумали
>>1129289 Гугли отличия между статической и динамической линковкой. А чтобы все работало, то просто скопируй дллки, которые просит программа, из /MinGW/bin/.
>>1129290 Да вроде бы они в одном месте ищутся. Я еще использую sfml-system-2.dll (вроде так), и когда ее нет, он ругается при RUN и при запуске руками. >>1129299 Первое, что я попробовал. Только там нету libgcc_s_seh-1.dll , зато есть libgcc_s_seh_64-1.dll. Я пробовал его переименовывать и засовывать в директорию с exe файлом, и как итог - та же самая ошибка. >>1129294 А могу ли я не используя их среду использовать их компилятор? Она у меня медленно работает.
>>1129315 >Первое, что я попробовал. Только там нету libgcc_s_seh-1.dll , зато есть libgcc_s_seh_64-1.dll. Я пробовал его переименовывать и засовывать в директорию с exe файлом, и как итог - та же самая ошибка. Непереименнованный файл тоже пробовал? Хз в чем проблема, но тогда компилируй с параметром "-static", может поможет. >А могу ли я не используя их среду использовать их компилятор? Она у меня медленно работает. Да, из командной строки. Правда студия все равно должна быть установлена.
>>1129289>>1129290>>1129315 Хотите - можете почитать МСДН, но разница в том, где ищутся дллки для процесса, запущенного из под другого процесса. >>1129289 В папке компилятора есть папка bin, добавь её в PATH (фгугл). >>1129315 Если программа просит какую-то либу, то она, блядь, где-то таки есть. Найди её поиском по ЖД. >>1129330 Из последних SDK его исключили, компилятор из WDK убрали. Качаёшь инсталятор коммьюнити-студии - выбираешь декстоп ц++ - получаешь визуал студио коре едитор с неотключаемой галочкой. >>1129331 Чиркнул моду.
>>1129349 >В папке компилятора есть папка bin, добавь её в PATH (фгугл). Уже добавлена >Если программа просит какую-то либу, то она, блядь, где-то таки есть. Найди её поиском по ЖД. Искал, нашел только libgcc_s_seh_64-1.dll
>>1129289 Проверь еще нет ли разделения на дебаг и релиз версии. Откомпилируй и запускай именно релиз версию. Дебаг может быть расчитана на запуск с помощью иде через какие-то местные мокрописьки, а не обычное исполнение. Посмотри еще в консоли иде какой командой запускается файл на исполнение - там обычно(часто) пишутся команды запуска. Есть ли такое в CodeLite не знаю.
>>1129356 Есть такая хуйня: C:/TDM-GCC-64/bin/g++.exe -o ./Release/sockets @"sockets.txt" -L. -LC:\SFML-2.4.2\lib -lsfml-system -lws2_32 в sockets.txt object файлы прост прописаны. Тут просто линковка вродь, хотя я хз. У меня даже надежда появилась когда ты про Release сказал (есть такое разделение да), но в итоге все та же хуйня происходит.
Блять, может все таки сесть на стул с майкрософтом и не ебаться, но мне уже тупо интересно что за хуйня.
>>1129361 Ну да это компиляция. Посмотри может в консоли когда программа запускается - может там команда запуска есть. Поищи в настройках где флаги компиляции можно добавлять и попробуй добавить -static-libgcc -static-libstdc++ это статическая линковка рантайм библиотеки. Еще может почитай про динамическую линковку в операционной системе виндоуз. Потому что в линуксе для динамической линковки не достаточно просто закинуть библиотеку в нужные папки. Еще должен обновиться кеш динамического линкера (ldconfig) - может в виндовс тоже что-то подобное есть.
Накатил вроде Visual C++ в CodeLite. Но когда даже тупой хелло ворлд пытаюсь откомпилить вылезает дохуя вот этого: https://ideone.com/gSFSyD В чем проблема может быть? Я наверное должен был понять, но я пока еще не совсем шарящий.
Потом собираешь снова и ещёшь ошибки снова. Каким образом это упрощается в обычной студии - хуй знает, она, скорее всего, генерит список зависимостей из заголовочных файлов.
Народ, вот такой вот нубовопрос: Есть строка, выполняется проверка: присваевается ли её содержимое через StrToFloat переменной типа float. Является ли это действие проверкой на то, что содержимое строки - вещественное число?
>>1129552 >>1129550 Спасибо за ответ. Тогда я правильно понял, что наиболее верной будет сперва проверка строки на содержание только цифр + не более одной точки (при этом не первым/последним символом) + возможным минусом первым символом?
Краем уха слышал про регулярные выражения, но вот беда, поскольку я совсем-совсем начинающий и в синтаксисе языка ещё не разбираюсь, а в интернетах примеры в основном для всякой джавы и пхп, то не мог бы кто подсказать учебник или статью, где пишут про регулярные выражения для с++ (операторы, их атрибуты, какие нужны библиотеки)? Ну или тут рассказать. Думал с помощью них попробовать вытаскивать из строки заданные выше символы и сравнивать потом с оригинальной строкой.
>>1129585 > Тогда я правильно понял, что наиболее верной будет сперва проверка строки на содержание только цифр + не более одной точки (при этом не первым/последним символом) + возможным минусом первым символом?
Возможно, он пропускает начальные пробельные символы (табы, перенос строки и прочее), и затем считывает float в одном или нескольких форматах (научный, который представляет собой запись с показателем десятичной степени, например 10e5, или какой-нибудь еще). А вот когда он натыкается на неожиданный символ - тут уже без знания доков или механизмов по одному названию ничего не скажешь. Ну разве что может быть семантика у метода с указанием флага успешного выполнения, к примеру.
> Краем уха слышал про регулярные выражения, но вот беда, поскольку я совсем-совсем начинающий и в синтаксисе языка ещё не разбираюсь, а в интернетах примеры в основном для всякой джавы и пхп, то не мог бы кто подсказать учебник или статью, где пишут про регулярные выражения для с++ (операторы, их атрибуты, какие нужны библиотеки)? Ну или тут рассказать. Думал с помощью них попробовать вытаскивать из строки заданные выше символы и сравнивать потом с оригинальной строкой.
Регулярные выражения слишком жирные, чтобы заниматься парсингом чисел. Думаю, что методов, которые представляет те же стандартные потоки, тебе будет вполне достаточно. А если ради интереса, то синтаксис там вполне простой, для этого книг читать не надо, достаточно мануалов.
>>1129624 >семантика у метода с указанием флага >заниматься парсингом >стандартные потоки Для меня это пока нецензурные выражения, но всё равно спасибо. Буду смотреть что это.
>>1129641 Чего такой агрессивный? Читаю, но медленнее чем хотелось, особенно учитывая, что задачки нужно сдать гораздо раньше, чем успею это все нормально почитать.
>>1129843 The trick is to keep the size of all public classes of a library constant by only storing a single pointer. This pointer points to a private/internal data structure that contains all the data. http://wiki.qt.io/D-Pointer
>>1129488 Для того, чтобы это проверить, тебе нужно использовать потоки - создаёшь stringstream из строки, считываешь оттуда число, узнаешь число сожранных символов. Если число сожранных символов не равно длине строки, то в строке не только число.
Анон, а подскажи, - как при помощи QT логиниться на ресурсе в локальной сети? Нормальных примеров в сети не нашёл, мануал читал Пока понял что мне нужен QAuthenticator в который я кладу логин и пароль Затем мне нужен QNetworkAccessManager, а так же слот, который бы обрабатывал запрос ресурса. Со слотом всё в целом понятно void onAuthenticationRequestSlot(QNetworkReply aReply, QAuthenticator aAuthenticator) { aAuthenticator = &myLoginPass; } Но непонятно как при помощи QNetworkAccessManager сделать запрос на аутентификацию. Пытался myNM->get(QNetworkRequest(QUrl("\\\\Test\\"))); Никакой реакции. Как это правильно сделать?
Сап. В Qt Creator 4.4.1, версия под вин почему-то при пошаговом выполнении по F10/F11 стал переключаться на листинг дизассемблера и идет по нему. Галочка/её отсутствие в меню Отладка-Уровень инструкций ничего не меняют. Что делать?
>>1130356 Имеется ввиду то, что текст программы вообще не показывается? А это дебуг билд хоть? >>1130551 Ему компилятор нужен был. Про Build Tools не все знют, раньше компилятор с обновлениями проще всего было получить из студии.
Что в STL C++ означает, когда у меня есть некий мой пользовательский класс A, который конструируется из 2х чисел, предположим и я создаю А<int> a(1,2); что это вообще за контейнер или объект?? встретил в коде и не могу понять
>>1130767 (1,2) - это параметры конструктора (и если их много, выбирается подходящий). Что там у тебя конструируется - контейнер, мутекс, или ещё какая залупа - никому, кроме тебя, неизвестно.
Запилил вот такой синглтон для логирования, собственно, прошу посмотреть, попинать ногами и ткнуть носом в дерьмо, там где я неправ. (Про то что синглтоны вообще считаются злом я знаю). Ещё хотелось бы задать вот какие вопросы: 1) Правильно я понимаю, что правильнее будет заменить (const std::string& message) -> (std::string_view message)? 2) Почему, когда я закомментировал в статическом методе Get() последнюю строку(т.е. return *pThis) у меня всё нормально скомпилировалось и работало. У меня было два указателя, которые указывали на разные адреса, но откуда они это взяли, если функция ничего не возвращала? 3) Правильно ли я понимаю, что здесь избыточно явное запрещение функций с мув-семантикой? 4) Насколько вообще рационально создать обертку для более удобной работы с файлами из функций filesystem(ака QFile)? 5) Что делать с деструктором? Ну, то есть, код деструктура вообще же не будет вызваться, а по-хорошему ведь нужно же файл закрывать. А что делать, если в деструктуре надо удалять динамическую память, это же утечки, как решают тогда такую проблему?
>>1131125 Что значит не вытащили? >The filesystem library was originally developed as boost.filesystem, was published as the technical specification ISO/IEC TS 18822:2015, and finally merged to ISO C++ as of C++17.
>>1131233 В каком плане производительности? То, как быстро они собирают твой код, или производительность генерируемого кода? Если второе, то гцц пока лучшее, что придумал мир в общем случае. Интел в конкретных ситуациях может использовать оптимизации, т.к. знает устройство своих процов лучше других. vc - говно.
>>1131247 >то гцц пока лучшее, что придумал мир в общем случае. >vc - говно. Можешь объяснить почему? Работаю в VS2017, на другие IDE кроме вижака без злости вообще смотреть не могу, но если разница между компиляторами значительная, то пересилю себя.
>>1131486 Да, только для этого всё равно нужно заморачиваться как это сделать, настроить, что делать если какая то хуйня в тексте ошибок компиляции и т.д. И я вот спрашиваю, стоит ли оно того. В чем охуенное преимущество g++ над vc++? Можно со всякими низкоуровневыми подробностями
>>1131715 Пояснение для совсем умственно отсталых: Очевидно же никому не нужная windows параша никому не нужна среди нормальных людей и уж тем-более для программистов, школьники гоняющие крузис в перерывах написания хелло ворлдов не в счёт.
>>1131597 Ну это всё понятно, арряя, кроссплатформенность, лепукс рулез венда маздай)0. А вот так чисто в сухом остатке на уровне сырых байтов в чем преимущества gcc++ над vc++?
>>1131756 RAII базовое понятие C++, почитай. В принципе shared ptr в большинстве случаев нахуй не нужон, а юник это лучше нововведение эвер, 20 лет ждал.
>>1131789 На работе пишу под линукс и использую VSCode. Оказалось лучше, чем я думаю - легко настраивается сборка и отладка, более-менее сносно работает навигация по коду и автокомплит. Сам редактор как в студии практически.
>>1131789 >У гцц стандарты в каком плане? понимаю, никому не захочется по пунктам расписывать, в чем vc++ с заглотом всасывает у гцц, но хотя бы один убойный пример можно?
>>1131910 Он не был честным. Для честного рандома нужен источник энтропии - или аппаратный, или его имитация на основе нажатых клавиш/трафика/содержимого экрана/звука с микрофона и т.д.
Все это слишком сложно, чтобы запихивать в стандартную библиотеку.
>>1132046 cmake работает, спору нет, но у мезона уже неплохой список проектов появился. Интересны идеи про потенциал, хотелось бы перекатиться чуть раньше чем вся индустрия на что-нибудь более удобное.
Посоны, а чо ставить то, аа-а? Визуал студио если целиком то там пиздец дохуя всего, какой минимальный набор чтобы ковыряться в языке создавая консольную хуйню. Коротко вопрос, такой. Где качать компилятор и нубовской набор библиотек. IDE среды идут без компилятора, насколько я понимаю. Пока установил голый VS Community 2017 без нихуя.
>>1132974 его ценой Ты забыл добавить. Решарпер для крестов продается только в Ultimate-версии, которая стоит пиздец как дорого, если уж о ценах речь зашла
>>1133970 1. Алгоритм быстрого возведения в степень придумали чуркобесы? 2. Нахуй тебе рекурсия глубины power, да ещё и нехвостовая? 3. Не используй тернарный оператор, пока не научишься в форматирование.
>>1133979 >Отрицательные степени? https://ideone.com/9VwwEe Но теперь уже тоже говнокод, а вообще >>1133983 этот господин все верно написал, нахуй нужна именно рекурсия, хотя если это просто задачка какая, то ладно.
Есть какой-нибудь достопочтенный господин, готовый помочь мне разобрать 2к строк кода? Большая часть кода — это огромный однородный свитч, так что реального чтения там намного меньше. Писал эту портянку не я, но мне надо внести туда изменения и пересобрать. Проблема в том, что там есть некая UB-дыра, приводящая к segfault под линуксом, но нормально работающая под виндой.
Возможно, чей-то опытный глаз поможет быстрее определить проблему.
>>1129255 (OP) Здарова, котаны. Студент-почти-второкурсник итт. Выбрал своим профилем кресты, посмотрел требования на hh и появился ряд вопросов 1) Под какой осью сидеть/ разрабатывать? 2) Насколько большая разница между кодингом под никсы и форточки? 3) Когда осилю Страутструпа , в какую сторону копать? 4) Классика вопросов для джуна? Два стула, какие библиотеки?
>>1134866 1. Винда\Студия. 2. Разница огромная, у красноглазых ублюдков нет нормальных тулзов. Щас бы в 2018 пердолиться в сосноли. 3. В любую другую, чем дальше от С++, тем лучше. 4. Любые, главное, не С++ные
>>1133946 1) Вложеный тернарный оператор говно, особенно в одну строку. 2) У тебя одинаковое условие в подоператорах и одинаковый исход для false. 3) Рекурсия с хуй знает каким числом вложений - это охуеть. 4) сукоблядь, в большинстве процессоров с FPU есть инструкция для этого! В стдлибе есть функция для этого! >>1134620
>>1134620 Могу попробовать. >>1134645 Это один из методов описания шаблона в целом. Частичная специализация может быть описана для произвольного условия, при выполнении которого она будет использоваться.
>>1134936 > Разница огромная, у красноглазых ублюдков нет нормальных тулзов. Щас бы в 2018 пердолиться в сосноли. Кому пиздишь тут? Есть нормальный qt editor.
Плюсаны, посоветуйте литературу по написанию высокопроизводительного кода на плюсах. Сам шарпист, но сейчас понадобился DLL на кроссплатформенных плюсах для Xamarin.
>>1134866 > 1) Под какой осью сидеть/ разрабатывать? Это требования проекта, а не твой выбор. > 2) Насколько большая разница между кодингом под никсы и форточки? Если писать хорошо, то никакой. Иначе будешь чинить под другой осью. > 3) Когда осилю Страутструпа , в какую сторону копать? Копай шапку дальше > 4) Классика вопросов для джуна? Два стула, какие библиотеки? Копай шапку
https://ideone.com/SiQOk2 Задания обрезать первый символ в строке и засунуть новую строку в переменную a. Сделал через memcpy. Как можно там автоматизировать 3 аргумент с количеством копируемых байт? Шоб через sizeof. Помогите, пожалуйста:3
>>1135035 QtCreator уебищное говно, а все кто в нем пишет - умственные инвалиды. Вообще все qt несвежая подзалупная смазка. Сука вот же ебучий фреймворк, заставили на новой работе на этом говне писать. Тру крестобляди, вы согласны? Может создадим тред унижения qt-дебилов?
>>1136081 Нет я уже давно угорел по кроссплатформе. Но вот только дестопные приложухи лучше уж на джаве какой нибудь писать. А как студия разработки кроссплатформенных либ - очевидный Clion, да. Хотя недавно открыл для себя https://nuclide.io/ и https://buckbuild.com/, просто ульмитативное ультракроммплатформенное решение. Ну вот пришлось из-за кучи легаси писать либы с использование qt (не ui), это пиздец, ну есть же boost ребята. Для асинхронности - boost::asio, он скоро въедет в стандарт, а qt - тухлое несвежее дерьмищще.
Есть у меня одна идея. Абсолютно тривиальная хуета. Но я уже долгое время пытаюсь понять, как внутренние компоненты будут взаимодействовать друг с другом. И всё гавно какое-то. Мне уже кажется, что нахуячить монолитный код это нормально. Книги на амазоне, что я видел, это вода о воде. Статьи всякие про декомпозицию читал. Когда читаешь, это кажется так легко. А потом делаешь сам и ловишь рейдж. Помогите, или я поеду. Может есть какая нормальная книга, чтобы даже такой даун, как я, просветлился.
>>1136350 Отталкивайся от глобальных паттернов и потом начинай декомпозицию к более локальным. Для первого случая советую к прочтению Pattern Oriented Software Architecture, да и для остального тоже. Одна из самых годных серий книг по паттернам в архитектуре приложений.
Можете посоветовать какой-нибудь интересный проект, который будет делаться неделю-месяц и поможет в процессе освоить плюсы и библиотеки std? В вузе задали самому выбрать задание, а идей нет. На плюсах учусь писать около полугода, основы знаю.
Сап проганы. Есть ли смысл использовать в качестве аргумента функции std::shared_ptr<Someclass> someobj, если для Someclass определен move constructor? Т.е., чтобы в некоторых случаях не писать somefunc(std::make_shared<Someclass>(args)); , а писать somefunc(Someclass(args)); когда я хочу сэкономить на памяти и вызовах всяких конструкторов копирования, при передаче объекта через несколько функций подряд.
Посоны, даю LsaEnumerateAccountRights корректный сид, полученный через NetUserEnum, но она почему-то отвечает мне ERROR_FILE_NOT_FOUND. Запускаюсь под админом, возвращает ошибку, когда пытается получить привилегии обычного пользователя (в этом случае, когда пытаюсь получить свои привилегии). В чем может быть проблема?
>>1136537 >, а писать > somefunc(Someclass(args)); В этом случае конструктор тоже будет вызван. Если ты хочешь создать объект из нихуя (только из аргументов) то move constructor никак не поможет. > при передаче объекта через несколько функций подряд Создание копий std::shared_ptr будет скорее всего быстрее чем вызовы move constructor (так как std::shared_ptr в большинстве случаев будет меньше чем остальные классы). Как-то ускориться можно только через allocate_shared - чтобы не дергать кучу, зависит от ситуации, может и нихуя не помочь, а то и замедлить.
>>1136732 шаред птр там на каждое копирование каунтеры на атомиках инкрементирует и проверки делает, что конечно легкая операция, но не бесплатная, может и не быстрее move быть
>>1136732 >В этом случае конструктор тоже будет вызван. Если ты хочешь создать объект из нихуя (только из аргументов) то move constructor никак не поможет. Ну я имею в виду, что в случае вот такого кода и наличия move constructor для Someclass:
// тут вызывается обычный конструктор, потом move constructor при передаче аргумента в функцию do1 do1(Someclass(obj));
void do1(Someclass obj) { // move constructor при передаче аргумента в функцию do2 do2(obj); }
void do2(Someclass obj) { // move constructor при передаче аргумента в функцию do3 do3(obj); }
void do3(Someclass obj) { // move constructor при передаче аргумента в функцию do_final do_final(obj); }
Таким образом за всю цепочку вызовов функций (do1 -> do2 -> do3 -> do_final), обычный конструктор вызывается 1 раз, а все остальные разы move constructor. Я прав? Не знаю, понятно ли написал, лул. Просто я обычно использую в таких случаях std::shared_ptr, но писать std::make_shared<Someclass>() каждый раз довольно длинно, да и читать это не так удобно.
Посоны! Нахуй нужны ссылки? С указателями всё понятно, это полезная и хорошая вещь чтобы крашить программу самым неожиданным методом. Но нахуя ссылки? Они просто заменяются препроцессором на имя ссылочной переменной или как то по другому? Есть профит от использования ссылок, кроме как создания константного типа ссылки чтобы не покрашить данные случайно?
>>1136805 алсо, лет 10 назад забил на вышку на втором курсе. На сишнике писал успел написать одну тупую лабу. Так вот, с той поры С++ обновил две, а то и три версии. Можно в двух словах, разница кардинальна или просто новых функций в стандартные библеотеки понапихали. Про ссылки вот я кстати не помню, были они в С++99 или нет.
>>1136805 ссылка ощутимо "безопаснее" чем указатель, за счет того, что не может быть нулем. А висячую ссылку сделать сильно сложнее, чем кривой указатель.
>>1136775 > вызывается 1 раз, а все остальные разы move constructor Да > std::make_shared<Someclass>() каждый раз довольно длинно Если под "каждый раз" ты подразумеваешь один раз на цепочку вызовов, то да. Если рассматривать именно со стилистической точки зрения то использовать смарт поинтер может быть действительно не совсем правильно. std::shared_ptr нужен для того чтобы гранить указатели на объект в нескольких местах, с автоматическим контролем за использованием. Просто передача объекта по цепочке вызовов не совсем использование по прямому назначению. Лучше передавать просто объект и надеяться на оптимизации. Может в будущем компиляторы смогут вообще оптимизировать эту хуйню, так чтобы никаких мув конструкторов не вызывалось (они то в принципе нахуй не нужны). Но по эффективности это примерно одинаковые подходы. Асло, есть же еще std::unique_ptr - я где-то читал что компиляторы во многих случаях способны оптимизоровать std::unique_ptr так что у него вообще нет накладных расходов, незнаю насколько это правда - но он может оказаться эффективней.
>>1136881 >Асло, есть же еще std::unique_ptr - я где-то читал что компиляторы во многих случаях способны оптимизоровать std::unique_ptr так что у него вообще нет накладных расходов, незнаю насколько это правда - но он может оказаться эффективней. Я изначально его и попытался заюзать, но в моем компиляторе был какой-то косяк, поддержка shared_ptr была, а unique_ptr не было или типа того. Ну, это давно было. Поэтому заюзал shared_ptr, чтобы не греть голову по поводу своевременного освобождения памяти.
>>1137475 У тебя десять массивов, которые являются элементами другого массива. Ты стер массив из десяти указателей на десять массивов, но те десять массивов по десять чисел в каждом всё ещё существуют.
>>1137498 exception safety равный нулю. И да, человеческий фактор с утечками.
>>1137504 std::array - жрет столько же сколько обычный массив на стэке.
vector - чуточку тяжелее. Но если ты будешь делать reserve\resize для пре-аллокации нужного количества памяти - то по производительности будет почти тоже самое
>>1137537 да, будешь. Макросы в современном С++ использовать строжайше не рекомендуется, кроме для кроссплатформенной разработки ну или когда код шарится между кернел-модом и юзер-модом, как у меня на работе
>>1137566 Не рождаются же C++ кодеры мидлами. К тому же, на hh есть вакансии, где указано без опыта, но как-то подозрительно всё это. Что вообще в сейчас на крестах пишут?
>>1137569 Без опыта != студент-интерн. Я собесил на вакансию "без опыта", приходили совсем нулевые дауничи. То, что у тебя нет опыта - это значит, что ты что-то заебись умеешь и знаешь.
Что пишут - я писал в разное время; qt-парашу для железной дороги, сервер управления поездами для нее же, бэкенд-утилитки для хостинг панели, прошивку для роутера, сейчас пишу драйвер для винды.
>>1137573 > >Да как так то. Ну знаю всякие основы ОС, сетей, алгоритмы, жму/пинусы с гитами и С++ на уровне базового курса, я нулёвый даунич?
Знание алгоритмов и прочих основ не делает из тебя не говнокодера. Нужно иметь умение структурировать код и проектировать его, чтобы потом через полгода или год, тебя ногами не пиздили за то, что ты написал. Ну еще знание всяких жизненных ситуевин очень помогает. Опыт карочи.
>>1137583 > Чтоб получить опыт, нужно устроиться на работу, чтоб устроиться на работу, нужен опыт. >>1137592 Понял, пойду выпиливаться, спасибо за ответы.
>>1137602 >Понял, пойду выпиливаться, спасибо за ответы. Короче блять. Совет тебе. Пробуй делать хоть какие-то мизерные, но все же проекты. Со временем ты увидишь, что у тебя начинают возникать бойлерплейты и ты постараешься их избегать и изобретешь для себя паттерны, но пока ты ничего не понимаешь в этом, паттерны будут только во вред, потому что их нужно грамотно применять. Попробуй написать какой-нибудь обменник сообщениями по TCP, потом улучшай, улучшай и улучшай. Переписывай все заново. Так и набивается опыт.
>>1137611 > Попробуй написать какой-нибудь обменник сообщениями по TCP, потом улучшай, улучшай и улучшай. Переписывай все заново. Так и набивается опыт.
Спасибо за совет, няша. Родители уже гонят на работу, а на собеседования страшно идти. Может ещё успею, а то сейчас вообще тьма, депрессия и боль.
Бля, как хуёво жить. Не было доступа к родной пеке, быстро накатил dev-c++ на виндах, написал всё, прогнал тесты - всё ок.
Перегнал исходники на никсы, написал скрипт, который генерирует скрипт запуска по передаче 500+ аргументов в последовательных запусках. Где-то на сотом файле всё умерло. Ну, думаю, что-то упустил. Ручками запускаю с этим файлом под виндой - всё ок. Ручками запускаю в никсах - обрабатывает файл по кругу, не останавливаясь в eof, лог вырастает в гигабайт за 10 секунд.
Вывод в конце цикла: [code] code_length = length - pre_pos; rintf("END OF FILE in %d bytes\n", code_length); printf("length is %04x\n", length); printf("pos is %04x\n", length); [/code]
END OF FILE in 5 bytes length is 0f5b pos is 0f5b
pos больше не меняется. length больше не меняется. После этого проверяется шапка цикла. Под виндой ок, под никсами файл начинает обрабатываться заново (то есть pos = 0).
>>1137553 >Возможно ли в 2018 студенту устроиться стажёром с++ в ДС за еду? если совсем кратко, то в случае если ты учишься по профильной специальности, те на программиста, тогда, да, возможно
>>1138270 Это одно и тоже, просто квадратные скобки - это синтаксический сахар для читаемости кода, особенно, когда у тебя двух-, трех- и т.д. мерный массив через указатели совершенно нечитабельно. А так компилятор генерирует абсолютно один и тот же код. Пруф: https://godbolt.org/g/5oxxc6
>>1138308 Прости, что доебываю, но у меня вопрос. Массив же состоит из элементов типа int? Почему тогда при смещении адреса указателя на единицу выдается другое число? По идее же, должно быть смещение адреса на 4. Выходит, в массиве хранятся указатели на числа по которым можно так проходить?
>>1138363 Вот, что написал Прата в "Языке программирования С": "добавление 1 к указателю" означает добавление одной единицы хранения. Для массивов данный факт означает, что адрес увеличивается до адреса следующего элемента, а не просто до следующего байта. Это одна из причин того, почему нужно объявлять вид объекта, на который указывает указатель. Одного лишь адреса недостаточно, т.к. компьютер должен знать, сколько байтов требуется для хранения объекта.
>>1138396 Не знаю, многовато воды и совершенно неинтересные упражнения, но очень подробно все объяснено, так что решай сам. >>1138400 Будет прибавлять к адресу sizeof(int) байт. Стандарт не гарантирует, что это будет 4 байта, но, как правило, это именно столько. Чтобы прибавлять по байту нужно сделать приведение в Си-стиле к указателю на char.
Не тренировался на крестах где-то год. Переустановил lubuntu 16.04 установил g++ geany. Открыл файлики( типа a.cpp b.cpp c.h) с учебника праты и получаю ошибки undefined reference. Помню раньше надо было открыть и нажать сборку именно на том файле где есть функция int main, сделал именно так, всё равно таже ошибка. Пробуюв консолечке g++ a.cpp b.cpp -o a всё норм работает. Понимаю что почему-то geany теперь не хочет автоматом подхватывать второй файл b.cpp (c.h он должен вставить ведь он заинклюжен). Как исправить?
Анчоусы, а вообще описывать метод вне класса, а в классе оставлять онли прототип функции - это норм? Как по мне - это ухудшает понимает понимание кода и читаемость в разы. Нахуй оно вообще нужно, можете объяснить? <пример. где такая хуйня встречается https://pastebin.com/Qstf02Wv
>>1138238 Анончик, если уж занялся изучением плюсов, то дам пару советов: 1. Создавая проект в Visual Studio, создавай "Пустой проект". Тогда, у тебя не будет лишних файлов в твоем проекте по типу stdafx и иже с ними. Плюс уберутся лишние флаги к компилятору, суть которых ты не будешь понимать еще пару лет.
2. Изучая разделы плюсов, отвади по 1-2 дня на каждый раздел, нарешивая задачки. Или придумай задачку по-крупнее (написать консольный калькулятор, игру в слова, крестики-нолики, решить квадратное уравнение, запилить класс Matrix для матричных вычислений и т.п.)
3. Даже не пытайся запилить игры. Minecraft ты не напишешь еще очень долго. Могут уйти годы. Причем, minecraft это пожалуй один из немногих проектов, которые вмещаются в одну голову, все дальше только командная разработка, готовые фреймворки (Unity, UE4, CryEngine и т.п.). Gamedev это вообще, глубокая область. Тебе придется разобраться в матане, графических библиотеках, работе со звуком, работа с артефактами (ассетами), разобраться как работает GPU (что такое Vertex Shader, Fragment Shader, Computer Shader и т.п., Shader buffer и т.п.). Плюс тут еще много подводных камней касаемых target platform, drivers, deploying, native OS API, hardware, build (dynamic linking vs static linking). Понятно, что тут еще будет накручен сбоку VCS, и всякие гиты ты должен будешь знать как пять пальцев. Это Single Player Game. Если игра будет Multi-player specific, то нужен будет чувак, который еще шарит в сетях, сетевых протоколах, знает про то как мониторить и тестировать RPS, будет знать в каких БД хранить инфу о пользователях и т.д и т.п.... Еще можно долго писать про наличие Художника, Звуковика, Сценариста. _______ Если хочешь для себя сделать что-то не сложное и за короткие сроки (пару месяцев, год). То бери только готовые решения - Unity (C#), UE4 (Blueprints, C++), м.б. какой-нибудь GameMaker. (GoDot не трогай, там много нюансов).
4. Если не планируешь изучать в дальнейшем английский, хотяб на уровень B1, C2, то спецом ты НЕ станешь однозначно. В доках ты ничего прочитать не сможешь - инфа 100%. Статьи ты будешь понимать коряво, а не то что пытался передать автор. И т.д.
5. (Если знаешь EN, или хотяб планируешь его изучать). Начинай смотреть канал - TheCherno (https://www.youtube.com/channel/UCQ-W1KE9EYfdxhL6S4twUNw). Отруби русский язык везде, где только возможно. Телефон и Компьютер на анг. поставь. Каждый день пытайся проговаривать в слух все что говорят Англоговорящие с youtube.
6. Держи в голове поговорку: "Повторение - мать учения". Также следуй принципу: "Все решения доводить до конца". Старайся концентрироваться на задаче/проблеме. Хотя, пох, можешь не следовать им, все равно через пару лет ты к ним придешь. Не всё сразу....
7. Старайся мыслить своей головой, и лишь затем пользоваться готовым решением.
Думаю к остальному, что я здесь не перечислил ты сам придешь или столкнешься в скором времени. ______________ П.С. Сам 23 лвл. Играл лет 10 в дотку и лол, а потом захотелось создать игру. За 5 лет, так игру и не создал, зато прочитал 20 книжек по программированию. Узнал кучу полезной и бесполезной инфы. И еще 10000 статей с хабра и прочей фигни. По-работал по 2+ лет на каждой из популярных ОС. Похоронил для себя C++ и перешел в web (пару лет назад) - мучу RESTful сервисы.
>>1138644 Если тебе интересна эта тема (gamedev), то развивайся конечно!! Просто сделать что-то большее чем minecraft в одного будет почти нереально, если ты конечно не со школьлной скамьи фигачил лин.алг, computer science и т.п. Арканоид - норм. Если прям шаришь, в том что сделал и все понимаешь, и можешь уместить весь проект в голове, то пробуй что-то большее. А если нет, то смотри в сторону UE4.
Лично, я дальше 2д поделок не смог уйти. Теперь понимаю, что нужно было в школе учить косинусы, тангенсы и нарешивать всякие СЛАУ. Щас, уже времени нет на все это, да и голова не свежа.
У тебя память кстати норм? Родичи заставляли в свое время учить стихи и прочее?
Господа байтобоги, пытаюсь разобраться с Cmake на примере одного опенсурс проекта, но что-то нихуя не выходит, чувствую только боль и унижение. Вечно какие-нибудь субдиректории не так подключаться/не найдуться и т.д. Куча магических переменных, пзц. Есть ли какая-нибудь годная книга по этой системе сборки, чтобы все аспекты сразу пояснили?
>>1138676 >У тебя память кстати норм? Родичи заставляли в свое время учить стихи и прочее? С памятью все хорошо. В школе много зубрил всякой терминологии гуманитарной. >Теперь понимаю, что нужно было в школе учить косинусы, тангенсы и нарешивать всякие СЛАУ. Щас, уже времени нет на все это, да и голова не свежа Насколько нужен сильный уровень математики? Если он чуть выше/равен школьному, то сойдет? >UE4 Мне почему-то удобнее работать с SDL. Уеч слишком монструозен.
У С++ вообще есть перспективы или скоро всему настанет пиздец и нужно будет всего полтора специалиста, поддерживающих древее говно? Есть смысл перекатываться в нейронки или ещё куда?
1.Можно ли в cmake как то добавлять префиксы для инклюдов в исходниках? Т.е. если у меня huilta1.hpp и huita2.hpp чтобы между собой в коде писать не #include "huita1.hpp", а #include "PREFIX/huita1.hpp"? 2.Можно ли как-то вывести список всех директорий, которые подключаются к проекту? 3.Можно ли то же самое сделать для всех файлов?
>>1138737 Память это core resource. Успех интеллектуальной деятельности от нее слишком сильно зависит. Мне вот не повезло, я прочитал от силы 3 книги за всю школу и выучил "Бородино". Теперь, вот даже не получается запомнить функции фреймворков с которыми работаю, каждый день. Всегда держу откртыми доки и стак.
Углубленный матан нужен, если ты пишешь с нуля физический движок. (движение частиц, упрогость объектов, кинематические функции для скелетов гуманойдов, баллистические уравнения и т.п.), все это нужно будет быть способным понять и реализовать.
Конечно есть готовые либы и функции на github, в частных блогах, книгах. Если с матаном будет не очень складываться, то тогда только готовые движки, либы и т.д. Ну хотя, может с школьными знаниями (геометрия, тригонометрия, лин.алг) дейсвительно можно делать примитив на уровне 2Д платформеров и др. жанров.
>>1138911 >>Ты сам почему с плюсов ушол? 0. Ну про память я тебе написал свою. Как рыбка Дори =). 1. Слишком долго разбирался в тонкостях языка и его экосистемы, как итог - просто перегорел, стало даже тошнить от расширения файлов cxx, cpp и тд. Теперь понимаю, что нужно было искать работу после двух лет изучения (и идти пусть даже стажером). Пожалуй, основная причина. Все-таки, на старте нужна хоть какая-то отдача. Если то, чем ты знаимаешься не приносит тебе денег в течение года, то что-то тут не так.. 2. Интерес к основным штукам для которых предназначен сейчас C++ - у меня пропал. (Embedded, gamedev, ROS, OS, "SUPER ULTRA HIGH PERFORMANCE SYSTEMS", и т.п.) - эти области Мне более неинтересны. 3. Архаичность. Когда имеешь дело с C++, то нужно всегда помнить про тонкости и хаки чистого C. Количество подходов к тому как писать либы и код, менялось более 40 лет, отсюда слишком разная структура у third party либ. Каждый раз нужно разбираться, как inject-ить либу в проект, потом настривать compiling, linking, building. Всегда нужно читать все header файлы. Ибо может быть какая-нибудь особенность конкретной либы. Порядок подключения хедеров, тоже иногда может быть важен. 4. Просто выпишу из своего дневника пару минусов: - Total absence of Unified Package manager - Total lack of Unified Best Practices - Exuberant Syntax, therefore it has Poor Readability && Many ways to solve a problem - If you write C++ code, then you need understand old C code. Because C++ founded on top of C. - Hard to configure IDE or code editor to make a builds. Real good IDE is just for Windows. - Dependency Injecting is so fucken mindgames. You always need to read source code and headers to understand library specific traps and pitfalls. - (RAII) Manual work with memory allocation/deallocation. (OFC if you work with C++ approx 5 years, then you know about SMART POINTERS), but this approach has overhead, and decrease performance of target system.
В целом я рад, что начал в свое время с C++. Мир веба, кажется теперь простым детским садиком.
"Куда ушел?" Веб. Здесь гораздо проще людям с памятью рыбки "Дори". Программирование, как таковое выливается в чтение доков, а затем примение какого-то готового шаблона из фреймворка. Почти что декларативный стиль программирования. Ситуаций, когда ты можешь что-то сломать на уровне логики - очень мало.
>>1138914 >>Можно про вот это по-подробнее? Как их вообще пишут? На OpenGl и DirectX? Да это обыкновенный набор cpp, h, c, cxx, hpp, dll, lib, dll.lib, so и д.р. файлов. В этих файлах описываются шаблоны игрового мира, шаблоны объектов, шаблоны устройств ввода (джойстики, клавиатуры, мышки, геймпады, рули, стики и т.п.), шаблоны свойств объектов и т.д. Там очень богатая иерархия шаблонов классов. Там будет обязательно реализация state machine. Реализация renderer (отрисовщика кадров) и т.п. В отрисовщике кадров уже используются всякие функции Direct3D (если проект собирается под Windows платформу), OpenGL (под все поддерживаемые им платформы, опять же видеокарта должна поддерживать соотв. стандарт OpenGL-ля), Metal (для MacOS), Vulkan (под все, если производитель карты замутил соотв. драйвера) и тд. Понятно, что пишут их только спецы, которые понимают как работает ОС и Железки. Остальные их только дорабатывают, фиксят баги.
сап, программач! понадобилось подправить cout, это я нагуглил, но не пойму, как его использовать правильно в нескольких файлах .cpp(с одним работает), компилятор говорит что-то об ошибке линковщика. https://pastebin.com/bXEz814y
>>1139427 Не, не утомил) В первую очередь определись с тем, что тебе интереснее - какая конкретно область тебя интересует (может тебе хочется железки программировать, писать драйвера для GPU, или там Движки писать для игр).
Твой вопрос очень сильно похож на: "Какой язык учить? немецкий, японский, итальянский или иврит?" Без доп. информации я не смогу нормально ответить)
__________ Если ты точно не знаешь, или еще не определился с областью, то тогда три КЛАССИЧЕСКИХ варианта для старта:
1. Архаичный вариант (Turbo Pascal), неплох для совсем новичков, чтобы пройти именно след. темы: Алгоритмизация, Структуры данных, Array, functions, procedures, input/output stream, и тд. Потом перескакивают на прагматические языки, на которых можно будет зарабатывать. В отличии от C, имеет понятный для новичков синтаксис.
2. Более сложный вариант (C). В начале будет сложнее, но зато не нужно тратить время на Turbo Pascal. Изучая язык, ты столкнешься со всеми важными топиками: Алгоритмы, структуры данных, looping, conditional statements, память, stack, heap, calling conventions, functions, functions returning void (procedure), linker, compiler, input/output streams, descriptors, pointers, constant values, ascii, posix/winapi, memory allocations/deallocations/reallocation и т.д.
3. Самый простой в начале это Python. Но многие моменты (по типу адресной арифметики, указателей (pointers), структуры данных, типы, и почти все выше перечисленное из пункта 2 - пройдут вскользь, а следовательно - будет плохая база, если ты соберешься делать что-то крутое и продвинутое. Тот же CPython будет уже так просто не заюзать. Но зато, на нем ты быстро можешь заценить результат твоих трудов, сможешь делать более крупные задачи раньше чем на C или C++. Начинать вкатываться в программирования с применением этого языка, это как - учиться вождению на Mercedes S Class, а потом придется вдруг пересесть на Subaru (у которой еще движок не собран), а потом вообще в копейке придеться копаться. К хорошему быстро привыкаешь. Не советую начинать вкатываться с этого языка. _______________
Прямой ответ на твой вопрос:
C++ не бывает без C. Используя C++, ты так или иначе юзаешь C. А юзая C ты всегда используешь часть C++. С лишь подмножество C++.
Если ты новичок, то иди по пункту 2 (выше). В противном случае бери любую Толстую книжку по C++ и прорешивай, осмысливай все что там написано. В таких книжках косвенно объясняется весь твой C. А затем начинается специфика самого C++. Параллельно можешь, смотреть канал - "TheCherno" на youtube. Как только наберешься умных слов и практики, начинай мутить сколько-нибудь сложные программы (десяток консольных программ и пару графических). Дальше ищи работу стажером. Вообщем, действуй!! Карты еще могут сто раз переиграться.
>>1139635 А если серьезно, то вообще не нужна. Именно для программирования физика не нужна. Программисту нужно знать алгоритмы, а анализ этих самых алгоритмов происходит с помощью всеми любимой математики.
Если речь идёт о разработке движков, то, опять же, всё зависит от конкретной задачи, т.к. такие штуки обычно создаются командой, где есть четко распределенные роли.
>>1139652 Ну, изучать CS обычно начинают с самого "низа", т.е. с самого базового устройства ПК (устройство процессора, транзисторы, логические вентили, триггеры и т.д.). Может он умудрился связать с физикой работу транзистора, например?
Сап. Читаю книгу по джаве Шилдта, там такие слова: >В C++ можно определить значение, которое будет принимать параметр, при вызове функции без аргумента, соответствующего этому параметру."
Это вроде как он на вариадики намекает? Или это про обычную перегрузку void foo(int p) <===> void foo()?
Я тебе отвечу конечно, но тебе лучше начать решать практические задачи (больше практики, меньше форумов на болтовню).
Физика тебе как-таковая ненужна, если ты будешь программировать Software. Но она дает, некоторые фичи для тебя, как для будущего инженера, а именно знание и понимание физических процессов (напр. процесс кипения, процесс перемещение объектов, процесс изменения состояний какого-либо вещества, процесс движения частиц (в зависимости от агрегатного состояния - газ, плазма, жидкость, тверд. тело), интерференция волн, и т.п.). Таких процессов просто овер 9999999999, поэтому нет смысл это все досконально изучать.
Посмотри основные темы - кинематика, электричество, термодинамика, магнитизм, волновая физика, оптика. Пожалуй основные, вот они помогут тебе в жизни. (Пусть знающие поправят, если что забыл). Короче физику нужно знать и понимать на уровне 7,8, 9 класса. По-крайней мере, мыслить ты будешь шире, чем человек без понимания физических процессов и законов.
Вся остальная физика только от задач с которыми, ты будешь сталкиваться. Просто так, не имеет смысла изучать, скажем Ядерную физику. Ну будешь, ты знать какие-то периоды полураспада хим. элементов, но практического толку будет - 0. Или там, скажем принцип суперпозиции, зачем оно тебе?
Какой проект можно создать, чтобы он выглядил нормально в портфолио(я же правильно понимаю, что джуна без хотя бы парочки проектов никто даже рассматривать не будет?). У меня была идея кое-что запилить на boost asio, но по сути же это будет куча функционала библиотеки а поверх немного моей логики. Про OpenCV и SFML тоже думал, но в обоих случаях надо лопатить огромные библиотеки ради написания достаточно простеньких вещей. Делал свои реализации стандартных вещей(библиотеки для работы с большими числами, математики кватернионов, обертку для сокетов и tcp/udp соединений), но быстро бросал, потому что это всё уже тысячу раз делали и много лучше чем я. Может у вас есть какие мысли?
>>1139922 Серьёзно? Это же какое-то дануство, не? Не, конечно, можно как-то сделать это более интресно, но разве в этом есть что-то кроме модного слова?
>>1139947 Хм, я даже не думал, что это будет кому-нибудь интресно, а вот если взять идею говночата и на него накрутить ssl, всякий функционал в виде комнат, конф, может гуи, возможность передавать зашифрованные файлы и тп. Это нормальный проект для портфолио?
>>1139947 А что по распространению либ? Вот есть буст асио, а есть ливень, а есть вангл. На что из этого стоит посмотреть в первую очередь? мимо тоже хочу написать хоть говночат
Почему во многих крутых фреймворках пишут свои контейнеры, которые схожи с теми, что есть в стл?
У нас с другом две теории, он считает что они пишут более производительные/оптимизированные варианты. Я считаю, что они скорее расширяют как-то функционал и серьезно оптимизировать стл не получиться.(Иначе почему это еще не в стл?). Есть еще варианты?
Пацанлар, допустим, я решил написать свой велосипед-аналог list. Как реализовать удаление элементов правильно? Иначе же хуита выходит! Всем элементам нужно сместится на единичку, что при больших объемах затруднительно?
>>1140263 Работодатель посмотрит на то, какие используешь указатели, как оформлен код, нет ли диких констъюкций вроде оператора возврата из середины функции и т.д. Текстовый режим или графика — менее важно. По крайней мере, насколько знаю лично я (лично).
>>1140237 STL обязана соблюдать контракт, написанный в стандарте. Стандарт позиционируется как универсальная штука-дрюка. Свои велосипдеы, если будут писаны крутыми чуваками - конечно лучше. Можно в векторе сделать Small Vector Optimization, можно изменить паттер аллокации с x2 на что-то более сложное. Можно нахуй выкинуть все эксепшены еще. Вариантов так-то много очень. Та же хэш-таблица может быть реализована разными способами.
>>1140501 Мне почему-то кажется, что они специально так сделаны, чтобы у тебя горело и ты разбирался. дважды кидал книга на пол, когда читал обход бинарного дерева Дойди до сортировок анон, дальше попроще
https://ideone.com/zy8aBH При завершении программы выдает ошибку. На сколько правильно я создал алгоритм увеличивающегося массива. В прошлый раз я приходил сюда с этим же алгоритмом и мне сказали использовать vector. Не уже ли нельзя нормально реализовать программу с увеличивающимся массивом?Жду ваших советов.
>>1140578 1)Ты увеличил n и лезешь за границу первого массива в цикле на 24 строке. 2)Ты не удаляешь первыц массив после копирования во второй и переопределяешь в 28 строке
>>1140578 А да, ты еще и в 28 строке сокрытие имени делаешь, как правильно заметили. Короче смотри правило. Если ты переопределяешь переменную, инициализированную через new,то ее нужно скопировать, удалить, создать, скопировать.
>>1140501 Когда главы разбираешь, там есть текст описания алгоритма и есть текст в рамке с программой, читай сначала текст в рамке, сразу начнешь понимать текст в книге при описании алгоритма
>>1140579 >>1140581 >>1140583 Это другой код здесь я удаляю оба массива https://ideone.com/fPExiY Примерно месяц назад я приходил сюда с таким же кодом, мне сказали используй вектор, а затем спросили зачем ты создаешь и удаляешь массивы по два 2 раза, но на мой взгляд все логично. Вообще вся эта проблема пошла с лабораторной работы по программированию. Тогда мы долго с учителем сидели и думали что не так, ну затем он тоже сошелся на том что массив объявленный внутри цикла невидно в другой части программы. Вчера я написал программу где я не удаляю массив arr_one а просто присваиваю ему другой размер и у меня впервые результат был верный я ввел 1 2 3 и мне вывело 1 2 3. Но только выводило ошибку. До этого на лабораторной тоже все было нормально, но в конце мне выводило массив не с моими числами, а со случайными числами. Теперь у меня код примерно такой же как на лабораторной. Но теперь выдает вот эту ошибку.
>>1140741 Я тебе уже ответил. Ладно, я сегодня добрый, поэтому разжую тебе всё , но лабы всё равно идут нахуй. Разберем твой говнокод по шагам Ты инициализируешь n=1. Переменная k, которая на 1 всегда меньше n нахуй не нужна. Далее ты создаешь arr_one в куче размера n==1. Далее ты заходишь в цикл, инициализируешь единственный элемент массива с клавиатуры. После этого спрашиваешь добавить или нет. Если да, то ты инкреметируешь n. На первой итерации цикла оно становится n==2. Далее ты создаешь arr_two размера n==2. Заходишь в цикл с условием (i=0; i<2;i++) При i==0 arr_two[0]= arr_one[0] При i==1 arr_two[1]= arr_one[1] Но arr_one у тебя размера 1, поэтому элемента arr_one[1] не существует и ты вылазишь за границу массива. Исправь условие в цикле на i<n-1 И добавь в конце функции delete [] arr_one;
А вообще за ебучий месяц ты мог всю блядскую книжку зазубрить, но нет, пацаны помогите, я сам не хочу разбираться в том, что наваял. А теперь иди читать книжки и доебывать своего мудака препода
>>1140820 Сотри весь код и напиши заново, без всех этих new и delete, никто ими в современном мире уже не пользуется, всю необходимую информацию тебе уже дали. Если твоя цель - просто сдать лабу, пройди нахуй и не трать наше время на дваче, лол, время ну вы поняли
>>1140823 даже несмотря на то что программа выдавала, ошибку лабу мне зачли. Информацию необходимую мне не дали. Мне сказали что сделать я сделал, все равно не работает.
>>1129255 (OP) Котаны, джаваблядок в треде: какие шансы у меня вкатиться в разработку на C++, если я уже привык к тому что меня неплохо кормят? В теорию программировани умею, инженерный бэкграунд и инглиш в наличии. Просто внезапно осознал, что занимаюсь какой-то хуйнёй.
>>1140949 Во-первых, ты пишешь на С, поэтому ты попутал тред. Во-вторых, если все же ты пишешь на С++, то используй iostream и потоки ввода-вывода. Во-вторых, conio.h НЕ является файлом стандартной библиотеки, вместо этого лучше используй getchar() из stdio.h (в С++: cstdio), или cin.get() из iostream.
>>1140921 С одной стороны мне нравится, что я на С++ пишу охуенно сложные вещи (сейчас на работе виртуализацией файловой системы занимаюсь, кернельный драйвер пишу) - с другой стороны, у меня иногда прям истерики, что кто-то шлепает формы копипастой на ангуляре, а я реально очень сильно напрягаю голову.
>>1141267 >Но при этом в стандарте нельзя найти никаких правил, которые бы запрещали такой код. Да неужели. Objects of array type are not modifiable lvalues, and although their address may be taken, they cannot appear on the left hand side of an assignment operator.
>>1141276 >Objects of array type are not modifiable lvalues Это с цепепереференс, верно? А я говорил что в стандарте нельзя найти. Кстати, http://eel.is/c++draft/basic.lval#10: "An lvalue is modifiable unless its type is const-qualified or is a function type." Поэтому откуда взята информация на цепепереференс — непонятно.
>>1141290 >откуда взята информация на цепепереференс — непонятно Точнее, понятно: откуда-то из прошлого. Из C стандарта или из старой версии C++-стандарта. C++ стандарт до сих пор ссылается на отсутствующее правило: http://eel.is/c++draft/dcl.array#7 [ Note: Conversions affecting expressions of array type are described in [conv.array]. Objects of array types cannot be modified, see [basic.lval]. — end note ] Только вот [basic.lval] говорит то, что я процитировал выше. Ни слова про массивы.
Пишу FTP клиента, и в протоколе FTP есть такая команда как PORT, вместе с которой я должен передать IP адрес клиента и порт, к которому сервер будет подключаться и по которому будет передавать данные. Вопрос: как получить IP адрес клиента? Именно тот, что например я вижу на 2ip.ru (мой IP в сети интернет, или типо того. Я не силен в сетях пока что).
>>1141267 >>1141290 Но ведь логично, что это нельзя сделать - не зная, сколько элементов лежит в массиве пытаться его перезаписать - гиблое дело, и хуй знает чем бы оно кончилось.
Как объявить через typedef прототип для scanf()? пытаюсь делать так: typedef int(__cdecl scanfPrototype) (const char format); но потом обсираюсь в scanfPrototype read = &scanf; Типа сигнатуры не те. Действительно, у scanf там еще ",...". Так вот, как это указать в прототипе ИЛИ как еще можно кроме std::cin >> var и scanf("%d", &var) считать инт в переменную? Желательно без считывания строки с дальнейшей конвертацией в int. Или все эти scanf и cin изолированно от меня всё равно конвертят ввод пользователя из ascii в нужный тип?
>>1141478 >Как объявить через typedef прототип для scanf()? typedef decltype(scanf) scanfPrototype;
>Или все эти scanf и cin изолированно от меня всё равно конвертят ввод пользователя из ascii в нужный тип? Ну не телепатически из его головы же читают.
std::vector<T> vec; // какой-то код, сующий в vec, допустим, 3 элемента
`&vec[0] + 2` и `&vec[2]` — не одно и то же, первое приводит к UB на любой реализации вектора, у которой push_back реализован по стандарту, т.е. работает за амортизационно константно евремя.
Решил я тут вкатиться в кодинг на C++ + Qt. Объясните, почему статически слинкованные приложения имеют такой-то размер? И это простой хеллоу ворлд. DEBUG-версия вообще линкуется неадекватно долго (минуты три).
>>1141869 > With Visual C++ (and other Microsoft compilers) on Windows, symbols aren't part of the binaries. Instead, they are stored in separate files called "Program Database" files (.pdb files). Just don't provide the .pdb files. Отладочной инфы там нет.
>>1141977 Так релизная оптимизированная версия весит 23.4Мб, а неоптимизированная 57.2Мб + 180Мб отладочной инфы в отдельном файле.
Может это из-за того, что я использую Intel C++ Compiler? Я его по большей части спиздил с рутрекера и поставил потому, что MSVC отображает ошибки конпеляции на русском языке и Qt Creator не в состоянии их отобразить. Подключить clang-cl к Qt Quick я не асилил, а icl полностью мимикрирует под MSVC и для его подключения достаточно заменить батник инициализации и mkspec.
Пишу в Code Blocks с SFML, пытаюсь открыть файл, пишет undefined reference to. Файл лежит в той же папке, кириллицы в пути нет, расширение поддерживается. В чём может быть ошибка?
>>1142045 Самый удобный инструмент разработки - это VS. В нем пишут вообще все, кроме поехавших вимоблядей, и всяких унылых дядь с эмбедом, где свои инструменты.
>>1142045 если ты хочешь делать упор на изучение qt, но знаний у тебя явно маловато, то наверное удобней будет поставить какой-нибудь user-friendly вариант линукса, кодить в qt creator и в качестве компилятора использовать gcc но если говорить вообще - похоже, у тебя явно не хватает бэкграунда чтобы спокойно делать что-то рабочее на qt
>>1142072 > 2. Реально ли писать на Qt в VS? Ну как бы да. Только вот официальный аддон так и не допилен. Какие-то подвижки есть, но например Qt Quick не поддерживается вообще и в ближайшее время не будет. Только если сам хочешь ебаться с cmake (который в последние VS, кстати, встроен).
>>1142072 1. Программы для всяких кастомных крошечных микросхемок. Обычно там свои IDE (не всегда) и тулчейны (всегда), и это не совсем типичный С++, скорее просто С с классами. У данных девайсов могут веселейшие ограничение типа 32кб оперативки, отсутствие Heap'a вообще, и прочее.
2. Да, писал с официальным аддоном, все норм. Причем цмейк тут у предыдущего оратора я не понял, но qtquick да, не поддерживался. Мое скромнейшее имхо в том, что удобство студии перевешивает убогость qt creator'a, даже если надо немного поебстись с аддоном.
>>1142345 Бля, обосрался даже тут Детектить кейпресы - ✔ Делать всякую хуйню - ✔ Иметь хоть какую-то логику - ❌ В общем че я сделал, завел вайл который просит Сдк клавы задектить мне кейпрес, если детектит то срет мне в другую функцию, а я в этой функции делаю что-то еще, теперь блять нужно как-то сделать так, чтобы если я нажал кнопку, эта кнопка подсветилась, попытался через треды и детач, но получилась хуйня, жму кнопку и жму её опять, два треда как альфачи дерутся за ебаную посдветку и кнопку хуярит то ярко, то тускло, пока не погаснет, как вообще логику сделать для этой хуеты?
>>1142185 что хочешь то и делай. тебя никто не заставляет использовать все фичи языка. если твои "си с классами" сообразны задаче, то пиши на них. как грится: "ты платишь лишь за то, что используешь".
>>1142351 Блять, опять обосрался, нужно сделать чтобы она не просто подсветилась, а ушла из полностью яркой в погашенную, 256 -> 0, такие дела, помогите или подкиньте идей каких-то
>>1142356 Если бы там, с учетом того, что я сделал, должно было бить в 2 соточки, а бьет в 1 процент макс, это при этом что два вайла и куча потоков >>1142358 CM masterkeys pro L rgb, брал с их сайта >>1142359 Да я итак на кнопки очередь ебанул, че дальше делать не ебу
Двач, есть ли смысл делать геттеры/сеттеры когда в них смысла нет и отдать пользователям класса просто публичную переменную? Просто в отличии от других языков, в C++ я не видел что-бы кто-то оставлял в классах публичные переменные вместо геттеров/сеттеров.
>>1142371 Да забей ты хуй на их SDK, я хук уже делал, да у них в SDK все есть(SetKeyCallBack()), там просто в самом SDK Тайваньские комментарии от 2008 года, а на сайте 3/4 SDK
>>1142373 Короче, почитал про эти рейс кондишон, пиздаааа, я ж головой ебанусь там, ну да ладно, пара вопросов: Как можно избавиться от бесконечных циклов чтобы задектить кейпрес и можно ли вообще от них избавиться? Как один тред бить по голове, если он лезет вперед другого и срет ему в руки?
>>1142373 Так в чём проблема? Ты хочешь убрать дребезг (debounce)? Ну, таймер тебе в руки. После прихода сообщения устанавливаешь таймер, по окончании которого он вызывает функцию установки цвета с последним сообщением. При каждом новом сообщении таймер сбрасывается, и пришедшее сообщение ставится последним пришедшим. И так для каждой клавиши.
>>1142380 Алсо, если есть такая логика: Нажатие -> Ярко -> Нажатие -> тускло, то чтобы не терять слишком быстрые нажатия клавиш, можно добавить Atomic-переменную, которая будет считать нажатия с момента последнего срабатывания таймера. Таким образом можно будет сохранить логику и при этом игнорировать слишком быстрые изменения.
>>1142390 На счет атомиков гуглил, но чет хз, логика такая, нажатие->кнопка и 4 ближние к ней загораются ярко->изначальные 5 кнопок чуть тускнеют, загорается следующий слой кнопок(ряд/колонка + 1)->опять кнопки предыдущий стадии тускнеют(кнопки самой первой стадии уже почти погасли) загорается следующий слой и на этом следующие слои больше не загораются, все предыдущие уходят в фейд, вот на моменте фейда и нажатие кнопок которые задевают уже нажатые кнопки проблема
>>1142395 У тебя там лапша из ифов небось? Наворачивай MVC. Делаешь контроллер. Он подписывается и получает вызовы колбеки (тоесть метод контроллера передается как колбек в SDK). И связан с моделью. Модель (предположительно) сосоит из массива с яркостями кнопок. По вызову колбека контроллер передает модели инфу что нажата такая то кнопка (вызывает метод модели "кнопка нажата"). Модель обновляет свою инфу - пробегается по всем кнопкам и у всех кнопок где яркость больше нуля уменьшает яркость и добавляет в массив обновленных кнопок, после этого яркость нажатой кнопки и соседних повышается до максимума и их айдишки тоже добавляются в массив обновленных кнопок. После этого этот массив передается контроллеру. Контроллер разгребает массив обновленных кнопок и посылает в SDK команды с новыми яркостями. Все ждут нового колбека. Естественно, это как вариант. Может повляют какие именно возможности предоставляет SDK. Что-то подобное можно и на лапше ифов сварганить. Если совладаешь с таким то можешь дальше навернуть абстракций, например DI - всю логику по которой определяется яркость кнопок выделить в отделную стратегию. Модель будет заниматься только собственно хранением инфы, общением с контроллером и вызовами стратегии. Если тебе захочеться изменить правила по которымподствечиваются кнопки - тебе нужно будет только заменить стратегию.
>>1142451 Только не throttle, а debounce, как я и писал. Можно сделать на https://github.com/Reactive-Extensions/RxCpp если нужен именно С++. Только вот нужно хоть как-то понимать что такое реактивное программирование, а он даже про мютексы не в курсе.
>>1142189 Ох нахлебался я от парня, который темплейты как недо-миксины использовал. Просьба всему треду - используйте темплейты по назначению, а не как средство превратить код в кашу.
>>1142681 Ну вообще всё помещается в одну фразу: Don't ask for the information you need to do the work; ask the object that has the information to do the work for you.
Если у тебя весь код в геттерах и сеттерах, то это может (но не обязательно) свидетельствовать о проблемах в архитектуре.
Это не всегда так (а в каком-нибудь шарпе или спринге геттеры и сеттеры вообще являются НЕЗЫБЛЕМЫМ ЦЕНТРОМ МИРОЗДАНИЯ, вокруг которого всё крутится), так как некоторые хитрые алгоритмы работы с объектами не могут без этого обойтись (либо требуют один рефакторинг за другим снова и снова), поэтому если ты видишь, например, в плюсах, что тебе оба класса надо значительно перекраивать, чтоб изменить логику их работы, то можно вместо этого дать геттер в одну сторону или сеттер с поинтером/референсом в другую (тут уже тоже надо смотреть по ситуации, чтоб выбрать из двух зол меньшее, иначе иногда получаются совсем дикие цепочки, где референс/поинтер передается на 3+ родителя вверх / ребёнка вниз, потому что там что-то с ним надо сделать).
А создание геттера и сеттера для каждого поля — вообще слабоумие (ну или необходимость, если этого требует какой-нибудь слабоумный фреймворк, который не может адекватно воспользоваться конструктором), потому что это равнозначно public type x, но лишь с другой формулировкой. Инкапсуляция, понятное дело, идёт по пизде.
>>1142577 >>1142700 > а в каком-нибудь шарпе или спринге геттеры и сеттеры вообще являются НЕЗЫБЛЕМЫМ ЦЕНТРОМ МИРОЗДАНИЯ, вокруг которого всё крутится Тому що это единственный способ сделать виртуальную переменную, которая определена в интерфейсе. Множественное наследование ведь не завезли.
>>1142082 > Мое скромнейшее имхо в том, что удобство студии перевешивает убогость qt creator'a, даже если надо немного поебстись с аддоном. Кстати, для студии рекомендую использовать недавно релизнувшийся verdigris. Там всего два hpp-файла добавить в проект. Тогда вместо emit, slots и прочих непотребностей можно будет использовать старые добрые макросы и не смущать intellisense и всякие статические анализаторы. Т.е. в итоге получается чистейший C++ без каких либо дополнений. Алсо, qt quick писать вполне себе можно. Просто нужно при создании проекта подключить в аддоне нужную библиотеку, и в готовый *.qrc-файл добавлять qml-формы с гуем. Ну и заменить сгенерированный main.cpp файл на qt quick-ный.
Сап ананасы. Хотел такой вопрос задать. Начал учить плюсы (до этого был си диез) чисто для себя. В последствии хочу вкатитца в ИИ/микроконтроллеры/реверс- инженегринг шото из этого (не хочу я ваш питон, нинужон он мне). Взял книжку лафоре. Оч годная. Прохожу с примерами где-то 1 главу за 1-2 дня. День читаю главу\разбираю какую- никакую алгоритмитизацию примеров, другой день - решаю примеры с книжки и кодварса. Вопрос. Сколько примерно времени пройдет, прежде, чем я начну понимать что к чему и куда мне двигаться ?
>>1142964 > чем я начну понимать что к чему и куда мне двигаться ? Для программирования мк C++ нинужен. Достаточно Си с классами, а на изучение этой хуйни много времени не уйдёт. Ты же не собираешься постигать template-fu? Для мк более важно понимать как работают процессоры, про организацию памяти, про способы взаимодействия с периферией и прочее. Короче работа с железом. Для нейросетей нужно изучать алгоритмы, и опять таки ЯП тут не так важен.
>>1142992 Для MSVC требуется минимум версия 2017, поскольку он использует фичи C++17 для обхода багов компилятора. Там вообще хеадери пиздец какие сложные. Как такую хуйню вообще написать можно?
Я недавно вкатился в C++ из C#. И мне кажется я пишу не на C++, а на C# со странным синтаксисом. Особенно касаемо генериков и абстрактных классов. Например мне нужен класс с двумя типами, которые должны наследоваться от interface1 и interface2 соответственно и должны иметь конструктор не принимающий аргументов.
В сишарпе я это опишу так: public class azaza<T1, T2> where T1: interface1, new() where T2: interface2, new() {...}
>>1143347 И ещё один вопрос. Если я захочу использовать статический полиморфизм вместо динамического, то единственный нормальный способ проверить соответствие "интерфейсу" аргументов шаблона (пока не сделали концепты), это создать такие структуры:
(в данном случае тип должен быть классом, иметь конструктор по-умолчанию и метод `method` который без аргументов возвращает `void`)
а затем наследовать эту структуру вот так:
template <typename T1> class azaza: interface1_check<T1> {...}
?
Просто я не хочу, чтобы ошибки вылезали только когда полиморфный объект будет непосредственно использоваться. Хочу, чтобы всё вылезало ещё при создании класса azaza.
>>1143518 Нет, я просто изучаю C++ и спрашиваю, правильно я делаю или нет. Вот придумал макрос для определения наличия метода в типе
#define PP_CAT(a, b) PP_CAT_I(a, b) #define PP_CAT_I(a, b) PP_CAT_II(~, a ## b) #define PP_CAT_II(p, res) res #define LINE_NAME(base) PP_CAT(base, __LINE__)
>>1143585 Чому? Я "переизобретаю" концепты (которые обещают к C++20), чтобы компилятор не выводил кучу непонятных ошибок при работе с типами из шаблонов.
>>1143627 > а тут такие страшные сообщения. А что там страшного? Алсо, удалось упростить проверку. Теперь она выполняется один раз, а не два как в предыдущем варианте.
>>1143627 я подобную хуету на работе пишу фо фан. Проект маленький, всем похуй, что там я и как хуярю. У меня там модерн С++ курильщика во всей красе, рофл
>>1143794 > так и типы аргументов. Только вот он их почему-то не проверяет, только количество. При этом никак заставить его сделать это невозможно. Видимо какая-то "фича" `declval` либо я криворук.
>>1143730 В реальном коде я и близко к самописным темплейтам не подхожу и считаю их в почти любом проявлении вредными, что они должны быть только в библиотеках общего пользования и самим писать - только схватишь потом, поэтому настоятельно не рекомендую. Но вот ради прикола и самообразования конечно можно. Например, я реализовал монады на концептах, которые "подключаются" к стандартным вещам вроде std::vector и std::optional. И можно делать вещи вроде std::vector<int> x {1, 10}; auto y = x >>= [](int x) { return std::vector<int>{x, x*2}; };
Там примерно похожий уровень магии темплейтов, хотя концепты и позволили повысить читаемость.
Короче я ебанутый, но мне нужно нацти ответ на этот вопрос, есть консольная приложуха, в ней дрочево с битмапой, создаю битмапу 22на 6, крашу ее в красный, сохраняю как пнг, круто, теперь делаю функцию, которая мутит всякую хуцню с битмапоц и изменчет цвет раз в пол секунды или быстрее, да, я успеваю сохранять битмапу, но просомтр картинок не успевает так бытсро обновлятьсч и я из за этого пропускаю какие то моменты, вопрос следующий, как эту ебаную битмапу видеть как изображение в риалтайме???да я бы мог перецти на какую нибудь хуету вроде цлр, сделать канвас в канвас запихнуть битмапу и ноль проблемы, но я бы и собаку тоже мог выебать, но мне нкжно именно в консоли это все делать, думал на счет того, чтобы вывести в консоль тупо один и тот же символ и тупо красить отпут консоли в разные цвета, но там цвета ограниченные, вроде бы можно через констыли сделать ргб, но костыль нашел только один с нулем апвотов на стаке, так шо надежды на это особо нет
А вот такой вопрос, есть ли какой простой способ сделать регулярку рекурсивной? Как я понял, в стандарте такая вещь не поддерживается, надо использовать буст или другую библу, но такой возможности нет. Суть проблемы - есть условная строка, которая разбивается на подстроки согласно регулярке, но эти сами подстроки тоже могут содержать подстроки и так далее.
>>1144051 Регулярные выражения, совершенно внезапно, могут матчить только регулярные языки. Это ограничение _частично_ обходится разными реализациями, но только частично. Погугли что такое регулярные языки и why you shouldn't parse html with regex.
>>1143964 > http://www.boost.org/doc/libs/1_41_0/libs/type_traits/doc/html/boost_typetraits/reference/function_traits.html > The template argument F is a function type, note that this is not the same thing as a pointer to a function. Видимо проблема в этом. У меня именно ссылка на функцию. А так я делаю так же как и стандартный std::invoke_result из C++17, (только вместо std::declval<Args>()... надо написать std::forward<Args>(std::declval<Args>)... чтобы он prvalue-ссылки не убирал). И даже если заменить мою самописную проверку на `invoke_result`, он тоже работает точно так же неправильно. А именно: все примитивные типы неявно приводятся друг в дружку, а вот типы классов он определяет нормально.
А вот с возвращением указателей на функции бида-бида. Если с простыми функциями ещё можно замутить простую предварительную проверку на SFINAE, то вот при возврате указателя на метод класса только вручную писать проверку. Слишком сложно. И так сойдёт.
>>1144207 Что гитхаб? Выложить туда мою библиотеку рефлексии для бедных? Тогда надо ещё поддержку GCC/CLANG добавить (там нужен макрос __PRETTY_FUNCTION__ вместо __FUNCSIG__ и формат функций/шаблонов чуть другой). Ну и тесты + CI. Я вообще гитхабовские библиотеки не скачиваю, если там нет CI.
class A { public: int foo(double x) {return 0;} };
class B: public A { public: int foo(short x) {return 777;} };
int main() { B b; std::cout << b.foo(1.1) << std::endl; return 0; } //8===================================3
Чому этот код у меня выдаёт 777 ? По идее ведь 1.1 - это double, и потому должен вызваться метод класса А. Или если метод с именем foo() найден внизу иерархии наследования, то под него уже подгонится полученный параметр (ну тип 1.1 урежется до 1)? В джаве не так, там аналогичный код вызвал метод суперкласса.
Есть ли специальное выражение, по которому можно это загуглить подробнее?
>>1145025 Вообще http://en.cppreference.com/w/cpp/language/overload_resolution плюс http://en.cppreference.com/w/cpp/language/adl Конкретно в твоем случае проблема в том что поиск (вообще) происходит по имени, начиная с самого узкого скоупа постепенно его расширяя пока не будет найдено имя. Когда найдено имя, только тогда в текущем скоупе ищется подходящий вариант. Если его нет то поиск прекращается. Тебе нужно или напрямую указывать в каком скоупе искать имя b.A::foo(1.1), или включить функцию суперкласса в скоуп наследуемый класс, добавив using A::foo; где-то среди деклараций методов. Какого хуя так сделано не знаю, может хотели максимально ограничить видимость "по умолчанию" методов классов чтобы не происходило непонятной хуйни с вызовом каких-то странных методов.
>>1145308 Да это для лабораторной, там обязательное условие - использование буферной переменной. Хотя я и в полевых условиях делал бы что то такое же, либо memcpy
Вечер в хату, подскажите, что он хочет и как это исправить? Пытаюсь третью неделю в кресты с абсолютного нуля, переписал листинг этого говна из книги Лафоре, выдает ошибку ссылаясь на 19 строку, гугол молчит, надежда только на вас, просветлённые
Ответы на все вопросы:
- http://en.cppreference.com/w/
- http://www.cplusplus.com/reference/
Прошлый: