Вместо шапки — https://github.com/sosachbot/cppthreadhat/wikiОтветы на все вопросы:- http://en.cppreference.com/w/- http://www.cplusplus.com/reference/Прошлый: >>1157163 (OP) (OP)
Есть классы Base и Derived, причем:class Base;#include "Base.hpp"class Derived : public Base { ... }При попытке собрать в студии 15 ошибка "Base class undefined"
>>1169710собсна что я делаю не так?
>>1169711>class Base;Это в Derived.hpp?
>>1169712Да, это всё содержимое Derived.hpp.
>>1169713Попробуй убрать class base; ты делаешь его форвард декларейшн и потом еще вставляешь весь код с Base.hpp. Может быть транслятор охуевает из за этого
>>1169714Ничего не изменилось. Ах да, все файлы содержат include guard в виде #ifndef BASE_HPP #define BASE_HPP <...> #endif, поэтому я и навставлял forward declaration, а то мало ли, вдруг соответствующий hpp в итоге подключается двумя экранами ниже / выше.
>>1169719Скинь код в ideone, только комментами обведи где base.hpp и derived.hpp
програмыч, помогите с кодом, хотел создать приложение которое возводит число в степень, но оно не работает со степенями > 2. помогите!!!https://pastebin.com/fKLGWttg
>>1169724такое чувство, что ты вообще нихуя не выкупаешь, что ты делаешь.
>>1169723Вот весь проект:http://rgho.st/8pCj9w7ZgDerived.hpp - это ...PlayerAi.hpp, а Base.hpp - ...Player.hpp.А вот конкретно портянка которая выдает ошибку:https://pastebin.com/ycjS1SEq
>>1169724Хуя шизофазия. Да и не только в коде.
>>1169728Ты лучше в ideone/pastebin засунь целиком оба файла. Мне лень скачивать архив, вытаскивать солюшн (или не дай боже c-make файлы), разгонять вижак и смотреть на файлы
>>1169731Хорошо. Ну Derived у тебя уже есть, а вот Base:https://pastebin.com/XgbZdUHR
>>1169733Выглядит всё нормально. Ты уверен, что правильно ошибку компилятора понял? И еще, я бы попробовал избавиться от лишних forward declaration'ов там, где они не нужны или наоборот, от лишних инклюдов. Ты дважды объявляешь class c; а потом такой #include "c.hpp", в котором содержится объявление класса. Я не знаю, как поведет себя vc++ в такой ситуации, но допускаю, что может не понять тебя.
>>1169760Ошибка такова. Вот инклюдов и объявлений лишних к сожалению нет, основные классы друг друга агрегируют, оставшийся класс наследуется от основного.
>>1169760И вообще хуйня какая-то с этими include'ами, в main я подключаю Game.hpp, в Game.hpp - Player.hpp, но перед Player.hpp всё равно приходится делать forward declararion класса Player, поскольку иначе ошибки. Это же явно первое включение Player.hpp, так откуда ошибки, если вот определение класса Player? Чушь.
>>1169794Какой смысл по твоему в forward declaration'е, если ты потом тут же инклюдишь хэдер → вставляешь объявление класса? Крайне наврядли, но может у тебя вижак шалит? Попробуй снеси все ненужные FD, или убери лишние инклюды там, где не надо. например в Game.hpp не включай Player.hpp, а используй FD и если ты не знал, то сообщаю, что при обработке твоего Game.hpp компилятор не знает размер объекта класса Player, поэтому ты можешь использовать только указатели класса, который ты объявил с помощью FD
>>1169796Да, когда уберешь всё лишнее - закрой вижак, в папке солюшна найди скрытую папку .vs и пидорни её. Потом открой слона заново.
>>1169798Убрал все include и forward declaration. Сделал так:main.cpp : include Game.hGame.h : class Game;include Player.h, View.h, PlayerAi.hОшибка в Player.h - "unexpected tokens precending ;" на Game@ член класса Player в Player.h Я же объявил class Game, чяднт-то.
>>1169802Закрыл решение, пидорнул папку vs, открыл решение и сделал все перечисленное.
>>1169802>Ошибка в Player.h - "unexpected tokens precending ;"это вообще похоже на синтаксическую ошибку. И еще, я думаю, что компилятор при трансляции не учитывает контекст, в котором включен каждый хэдер, поэтому в Player.h твой FD class Game просто не виден. Сделай FD в Player.h тогда уж, если так надо.
>>1169804Снова всё убрал и начал по ошибкам расставлять FD / include'ы по необходимости. Собралось-таки. Отличная дилда.
>>1169804Ну вот опять, добавил еще один наследующийся от Player класс, точно такой же как PlayerAi, ну там кроме пары мелочей, собираю - "unresolved external symbol" на вызов конструктора в main. Перезапускаю решение - пропали все файлы свежедобавленного класса, хотя в папке с решением остались. Добавил, пересобрал - всё равно. Как будто файлы класса где-то проебываются по дороге.
https://support.microsoft.com/ru-ru/help/4089821/files-disappear-from-project-after-saving-in-visual-studio-2015>10 Windows версии 1709 включает исправление некоторых событий файловой системы. Visual Studio 2015 ошибочно интерпретирует эти события, как удаление файла.
>>1169760Я слегка другой анон.Вот во избежание ебли с хэдерами, нельзя ли сделать вместо нескольких один с неймспейсом, где объявлены все классы, а дальше уже их реализации в отдельных срр?
>>1169847А я тот что просил помощи. В шарпе тема с неймспейсами охуенно заходит, там я вообще никогда с этой проблемой не сталкивался. А еще каким бы мегарешением ни был твой хэдер, в каждом другом хэдере тебе все равно придется делать fd, видимо потому что>И еще, я думаю, что компилятор при трансляции не учитывает контекст, в котором включен каждый хэдер
>>116985Слегка тебя не понял.Если у меня есть один файл с точкой входа, есть хэдэр с неймспейсом и цпп для каждого класса в этом пространстве имен, то я просто в цпп с реализацией добавляю инклюд файла с неймспейсом.А что ещё нужно-то?
>>1169909Тогда получается что у тебя интерфейс нескольких классов описан в одном хедере. Некруто.
>>1169710>>1169728у тебя ошибка во время компиляции Connect4Player.cppесли проследить цепочку включений хедеров и стражей включения, то по итогу получается что определение класса Connect4PlayerAi не видит определение своего базового класса Connect4Player, на что тебе компилятор и указывает
>>1169932Спасибо, уже решил вопрос. Теперь во второй раз переустанавливаю студию - сначала баг с исчезновением файлов, потом "the visual c++ project system package did not load correctly" после установки обновления, исправляющего проблему с файлами =\
Ну вот, не прошло и суток как все наконец работает.
https://ideone.com/CMnLqVВ code::blocks ошибка в switch()исправьте, если не трудномимонуфаг
>>1170159Попробуй каждому кейсу в свитче сделать скоуп, то есть фигурные скобки, брейк тоже должен быть внутри скобок.
>>1170166не работает
>>1170175ещё у тебя при каждом вызове функции твоего калькулятора отсутствует точка с запятой, каждый кейс у тебя должен быть типо:case 1: { multiply1(); break;}
>>1170189и свитч тоже должен иметь скобки, то есть:свитч(выражение) {кейскейси т.д.}//это типо закрылся свитч
Есть задание: реализовать класс дата который умеет в прибавление/отнимание дат. в нём мы организуем переменные день, месяц, год и должны переопределить операторы +/- чтоб сообственно плюсовать даты и получать на выходе конечную датуИ дальше в задании хуячятся ассерты:assert ( toString ( CDate ( 2001, 2, 20 ) + Day ( 9 ) ) == "2001-03-01" );assert ( toString ( CDate ( 2000, 1, 1 ) + Day ( 28 ) + Month ( 1 ) ) == "2000-02-29" );как сообственно реализованы эти "функции" Day и Month в ассертах? если мы переопределяем операторы + то будем мы сообственно складывать левый CDate с правым CDate данным как атрибут при определении оператора, как заставить программу правильно понимать что я хочу плюсовать день или месяц?Анон помоги!
>>1170246Здесь видимо классы Day, Month и Year агрегированы в класс дата, а определяется просто нужной перегрузкой соотв. оператора.CDate CDate :: operator +(const Month& month)//прибавление месяцаИ аналогично с другими классами.
>>1170252А day и month это скорее всего не функции, а вызов конструктора, просто без именования объекта.
>>1170246https://ideone.com/iDNVWJ
>>1170262это не пройдёт его ассёрт, там видно, что у него месяц завязан на значении дня, ты же просто прибавляешь день. И будет CDate ( 2001, 2, 20 ) + Day ( 9 ) = 2001-2-29,а не 2001-03-01.
>>1170252>>1170254>>1170262>>1170265спасибо, анон. допетрил
>>1170262я бы так не советовал делать. для year, month, day, hour и т.д. надо отдельные классы делать. ато получится что-то типаCdate date = Day(3) + Hour(4); // ну и какая тут дата в итоге?
Это больше в C тред вопрос, но здесь же есть мейк-эксперты? Вопрос в следующем. Обычно все объектники собирают по отдельности, а потом их объединяют в executable, например:OBJECTS = object_1.o object_2.o$(EXE): $(OBJECTS) $(CC) $(OBJECTS) -o $(EXE)object_1.o: ....object_2.o: ....Интересует следующее. Можно ли прописать в зависимостях у $(EXE) не все объектники, а лишь те, от которых он напрямую зависит в коде? Например так: $(EXE): object_1.o $(CC) object_1.o -o $(EXE)object_1.o: code_1.cpp object_2.o $(CC) code_1.cpp object_2.o -cTL; DRТо есть, хочу слепить два объектника в один, а потомуже его использовать для сборки экзешника. Проблемы: при сборке экзешника линкер ругается, что object_1.o ссылается на несуществующие функции (которые должны были быть в object_2.o). Помогите советом. Если кто-то недопонял, попробую внятнее объяснить, простите за сумбур.
>>1170619Зачем ты руками прописываешь правила сборки, в make есть встроенные.> в зависимостях у $(EXE) не все объектники, а лишь те, от которых он напрямую зависит в коде?Шо?
почему при подключении библиотеки <Windows.h> вылазит окно winuser.h и указывает на ошибку?
>>1170730wut? Скриншот может дашь?
Аноны, зачем мне знать сколько байт занимает тот или иной тип?мимо вкатывальщик
>>1170990Если не байтоёбишь, то незачем. А так чтобы понимать почему на 64-битной машине:int main(){int32_t a,b;int@ ptr = &a;ptr++;*ptr = 2;std::cout << b;}выводит не 2 а мусор. Ну и т.д.
>>1171032Спасибо
Антош, где почитать как пользоваться дебаггером полному нубу? Я плохо представляю что он вобще делает. Не конкретная ide а прост принципы блоховодства.Использую codelight.
>>1171036Берешь и пользуешься. Возьми gdb.
>>1170619https://stackoverflow.com/questions/6489627/how-to-use-multiple-source-files-to-create-a-single-object-file-with-gcc#6489760
>>1171032А при чем, в твоем примере, размер переменных? Там же соль в том, что память для не массивов выделяется не подряд а как попало. Или нет?
>>1171086ну пример не очень корректный. идея вint main(){int32_t a[2];int@ ptr = &a;ptr++;*ptr = 2;std::cout << a[1];}даже так 2 не выведет.в общем если есть указатели, то надо понимать какого они размера, что делает оператор + и ++ для указателей и т.д.
>>1171102Скорее на какой тип указатель указывает, размер у всех указателей одинаковый.
>>1171102Конечно не выведет, оно даже не компилируется.test2.cpp: В функции «int main()»:test2.cpp:7:13: ошибка: ошибка преобразования «int32_t ()[2] {aka int ()[2]}» в «int» в инициализации int ptr = &a;
>>1171061Оно! Спасибо.Способы есть, но я так понял, что такое обычно не стоит делать (как и предполагал). Так что не буду извращаться.
>>1171116Чем компилишь? MSVC?
>>1171125g++
>>1171126Странно. Кстати, в результате таки вивыодит 2. А все потому что автор примера думал, что на х64 машине integer будет 64 бита. Видимо, он хотел показать, что размер указателя разный на разноразрядных ОС.
>>1171136Я компилил это - >>1171102В коде очевидная ошибка. Но если ее исправить будет так же 2 для g++int - по стандарту не менее 16 бит, и в зависимости от компилятора и целевой системы может быть хоть 1024, пример не оч. удачный, т.к. почти всегда int32_t - синоним int.
>>1171144Ну ты писал, что ошибка следующая:>ошибка: ошибка преобразования «int32_t ()[2] {aka int ()[2]}» в «int» в инициализацииint ptr = &a;Почему g++ интерпретировал int @ptr как int ()[2] ?
>>1171107серьезно? прям уверен-уверен?
>>1171116ну ты же понимаешь что это неint ptr = &a;аint звездочка ptr = &a; ??
>>1171152Да, размер указателя в одном 32-битном приложении будет равен размеру указателя в другом 32-битном приложении, аналогично с 64-битными.
>>1171153Ну хотелось ему тыкнуть в тебя в твою опечатку, бывает. Меня больше интересует, почему это охуевший g++ распознал int@ как int () [2] ?>>1171147 - хуй
>>1171136О, расскажите балбесу, что тут происходит.Мы положили 2 в область памяти, но не имеем никаких гарантий что там не окажется что-то другое за время работы программы, так как мы пидарасы?
>>1171152Что не так?Указатель - переменная, содержащая адрес. Количество байт, которое отводится на адрес, является разным в х32 и х64 системах. Соответственно, размер который занимает указатель в памяти (именно указатель, а не данные, на которые он должен ссылается), является постоянным в одной и той же ОС.
>>1171200Ложим двойку в область памяти, где какбы должна находиться переменная b. В нашем случае так и происходит - двойка попадает как раз туда где лежит b.>не имеем никаких гарантий что там не окажется что-то другое за время работы программы, так как мы пидарасыНу подобные действия с нашей стороны - это undefined behaviour. Но я не уверен, может ли програма в короткосрочной или дальнесрочной перспективе перемещать данные, которые лежат на стеке (типа, вставить что нибудь вместо b, а саму b переместить куда-нибудь). Думаю, что такого быть не должно, но вдруг тут есть знатоки, знающие больше.
>>1171200Ну и, как я говорил, автор примера очевидно проебался, так как хотел продемонстрировать разницу в объемах памяти, которые занимает переменная-указатель на разных архитектурах.А на деле пример пытается продемонстрировать, что int на разных архитектурах - разный, что очевидно, неверно.
>>1171147Разметка, там звездочки проебались.
>>1171209Автор примера и вправду проебался, но показать он (я) хотел несколько другое. Переменные в стеке на 64-битной машине должны быть выровнены по размеру машинного слова, по крайней мере я в прошлом году проебался так с кодом, который оперировал переменным списком параметров (самописный printf со свистелками и перделками), суть в том что друг за другом шли int16 и in16, код собирался под 32бит, и эти int16 располагались с промежутком между ними, которого хватает на еще один int16.
Ананасы, поясните по хардкору:class Foo { int a, b, c; Foo(int _a, int _b, int _c) : a(_a), b(_b), c(_c){ ... }};Так можно.То же самое, только Foo(int _a, int _b, int _c) : b(_b), c(_c), a(_a){ ... }Так нельзя, потому что фактически будет a(_b), b(_c), c(_a), верно?А так:Foo(int _a, int _b, int _c) : c(_c){ ... }можно? Результат ожидаемый?
>>1171273у тебя полю a присваивается то, что стоит в скобках, независимо от того, на каком месте находится, поэтому первое и второе это одно и тоже.В третьем варианте у тебя с инициализируется значением _с и возможно ты что-то делаешь внутри фигурных скобок, но ты этого не написал.
>>1171274
>>1171274Перепутал порядок аргументов с порядком вызова в списке инициализации, спасибо.
>>1171273Все три варианта скомпилируются, даже если тело конструктора будет пустым в третьем варианте. Другое дело, что так делать не стоит. По второму варианту, почему так делать не надо, объяснено в Core Guidelines: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c47-define-and-initialize-member-variables-in-the-order-of-member-declaration
>>1171199oн не int@ принимает а правую часть. но почему - хз.
>>1171204ага. сразу в жопу язык затянул они таки разного размера, да? )короче начальный вопрос был про то, зачем надо знать сколько байтов какой типа занимает. пример был про то, что один и тот же исходный код может(!) скомпилироваться и сработать по-разному на 32 битной и 64 битной системе.смысл там в том, что тип переменных (или массива) был задан прям четко - int32_t - 32 бита. а тип указателя был задан как просто int !звездочкасука!.и этот int !суказвездочка! на 32 битной системе будет тем же самым что и int32_t !звезда!, а на 64 битной может быть тем же самым, а может и не быть.и вот если оно не то же самое, то !указатель!++ прибавит к указателю размер того типа около которого стоит звездочка при объявлении.типа int8_t !звезда! ptr++ - увеличит адрес на 1 байт, int16_t zvezda ptr++ - на 2 байта. так вот, в изначальном примере чувак подразумевал, что на 64 битной системе int по умолчанию - 64 бита и ++ к указателю перекинет его на 64 бита, ЗА вторую переменную. потому и запись туда двойки на нее не повлияет.
>>1171415Да ни хуя вы не поняли. В основном из-за того что я выбрал нерабочий пример, но всё же.Подразумевал я вот что - если создать на стеке две переменные, размер которых меньше машинного слова (а стек выровнен по машинному слову), то они не будут расположены последовательно, а между ними будет промежуток (в данном случае в пол-слова). С чего вы (сколько вас тут семенов) взяли "int по умолчанию", если я специально написал int32_t@?
товарищи, при разработке проекта потребовались знания принципа работы клиент - сервер подключения через сокеты, и описания клиента и сервера. т.к. в стандарте либ для работы с сетью нет, а гуи пишется на qt, то решил так же его поюзатьвнимание вопрос: может кто подкинуть литературы по1. архитектура клиент - сервер, как же оно взаимодействует и что нужно знать для этого2. работа с сетями с помощью qt (Qt_Network), документацию пока не хватает мозгов осиливать, а переводов нормальных не нахожумне самое главное, чтобы как можно доступнее было, т.к. сам тугодум еще тот, пока вкурю что-то можно быстрее застрелиться.спасибо заранее!
>>1171491что за софт? какую прикладную задачу решает?
>>1171494банальный desktop-чат, в теории должен иметь все базовые функции современных меседжеров (авторизация, передача сообщения, файла, создание конференции и т.д.)
>>1171495Ты "разрабатываешь проект", спрашивая у других программистов как пользоваться кьютом и как организовать клиент-серверное взаимодействие "как можно доступнее"? На мой взгляд это повод задуматься. Иди маны почитай самостоятельно.
>>1171495ну дык и глянь протоколы взаимодействися опенсорсных менеджеров которых десятки с сотнями разновидностейи сделай так же
>>1171491Computer Networks, Tannenbaum.
>>1171483С тем же успехом можно сказать, что они занимают машинное слово целиком.
>>1171415Если бы ты ещё писал нормально (и макаба не ломала разметку).
>>1171495>банальный
>>1171230 Ага, дошло.
>>1171483>написал int32_t@Опять за свое?
>>1171547толсто
>>1171483TLDR; Все беды от слабой типизации в c++
Аноны, начитался про d-pointer'ы в С++. Возник вопрос, почему добавление новых функций в DLL не ломает бинарную совместимость?Проверил: сделал DLL и прогу, вызывающую функцию из этой либы. Дописал в либу 2 новых функции: перед и после старой. Пересобрал либу (прогу не трогал), всё норм работает.Ведь функции вызываются по адресу? Если я дописал новую функцию перед старой, должен был измениться адрес старой?
>>1171756Адреса из dll подгружаются динамически.
>>1171756Смотря как импортируешь.
>>1171032>А так чтобы понимать почему на 64-битной машине:Это вообще не имеет отношения к размерам типов. Лол. У тебя UB из-за некорректной арифметики указателей.
>>1171147>Почему g++ интерпретировал int @ptr как>int ()[2] ? Он не "интерпретировал" int° ptr как int(°)[2].Он "интерпретировал" `&a` как int(°)[2], т.к. `a` это int[2], а применение оператора к выражению типа `T` даёт выражение типа `T*`.
>>1171410>но почему - хз. >>1171826>`a` это int[2], а применение оператора & к выражению типа `T` даёт выражение типа `T*`.
Ребят, посоветуйте пожалуйста книжку по "крестам" где на вполне наглядных примерах хорошо показываются тонкости параллельного программирования. Можно и на английском, но только не Уильямса. Этот урод слишком переусложнил свои листинги лишними тонкостями оригинального стандарта. Видимо хотел повыпендриваться.
>>1171985Уильямс переусложнил своими дурацкими примерами с кубиклами и листочками с цифрами.Проще прочитать оригинальный стандарт, чем разбираться с его аналогиями.
>>1171997Ну не знаю. Сломался на примере банкомата с ненужными там функторами и "бесконечными" передачами данных между экземплярами. Тогда я всерьёз задумался над погружением в Java с его суперклассами. Хорошо что одумался.
Можно ли как-то сделать, чтобы один класс мог использовать функции другого класса? Не совсем то, что я имею в виду наверное.В общем, вот есть у меня класс последовательные таблицы, по дефолту они не отсортированы и там используется простой линейный поиск, а есть класс отсортированные таблицы, там уже используется бинарный поиск. Могу ли я как-то сделать так, что отсортировав последовательную таблицу она стала имитировать поведение другого класса отсортированные таблицы? Была идея сделать в каждом классе поле которое означает тип таблицы и сделать какую-нибудь обёртку над ними и в вызове функции через обёртку проверялось бы это поле и в зависимости от него применялся нужный поиск, и например применив к не отсортированные таблице сортировку это поле бы менялось на сортированную таблицу.Или может есть какие-то не настолько костыльные методы это сделать?
>>1172070Сделай классы дружественными
Аноны, переодически приходит задача писать gui. Что взять? Студия идет нахой, я думаю. Есть решение эклипс, qt, netbeans, code::blocks и эмбаркадеро.Что выбрать? Я так понимаю два последних имеют возможности быстрой разработки ( RAD)
>>1172149Я имею в виду, сделать так, чтобы при вызове одной и той же функции (название имею в виду) в зависимости от типа класса вызывались разные функции. В этом примере линейный или бинарный поиск.
>>1172186То есть именно без наследования.
>>1172181>Студия идет нахой, я думаю.Такой пиздец. Вчера решил поставить, три раза запускал установщик и три раза выключал. Выбирал-выбирал компоненты, но всё равно хочет он мне кучу говна устанавливать, бейсики, блядь, неведомые никому неизвестные кроме секретного отдела мокрософта языки, просто впизду.
>>1172190Шаблон проектирования декоратор
>>1172190Или стратегия. Сам посмотри что лучше подойдет. Мне лень разбираться
>>1172225Спасибо, почитаю.
Друзья подскажите что значит std::nothrow я как понял какя-то фича на случай если не удастся выделить память через new? Но как себя ведeт не понял.Поясните по хардкору пожалуйста.
Есть ли по C++ туториал наподобие Кантора по JS? Чтобы было интерактивно, с задачами и решениями? Книжка Липман-Ларойе-Му неплоха, но проверять свои ответы на вопросы перепечатыванием текста программ и компиляцией - это перебор.
>>1172413>Друзьяне коллега, а конкурент!
>>1172413и еще это гуглится и понимается за минуту: перегруженный оператор new и все такое..изи-пизи
>>1172415нет в нем необходимостизадроты и так все проботают по книгам-мануалам лет за десятьа вкатывальщики не нужны в крестах, бесполезный балласт
>>1172413http://lmgtfy.com/?q=nothrow+c%2B%2B+%D0%B4%D0%BB%D1%8F+%D0%B5%D0%B1%D0%BB%D0%B0%D0%BD%D0%BE%D0%B2
Вот есть у меня поиск в глубину, он реализуется через рекурсию. Вопрос в том, есть ли способ засунуть туда вектор, объявленный в main_е, без всяких указателей и прочего.
Важно ли в каком месте в классе находится указание о дружественном классе?
>>1172529"у меня под полом подземный стук"смотря где он у тебя находится, этот поиск. может туда ничего больше и не влезет.
>>1172568http://www.e-maxx-ru.1gb.ru/algo/dfsКод почти как там. Какие есть способы отправить вектор в функцию?
>>1172181Qt. В коудблокс тухлый и инопланетный wx с макросами на каждый чих, у дельфей доисторический конпелятор и проприетарщина, у эклипса/нетбинса тот же кьют, только помноженный на жаботормоза.
>>1171415>на 64 битной системе int по умолчанию - 64 битаНа 64 битной системе и инт и даже лонг обычно 32 бита, прикинь.
>>1172181ты совсем дебил?Что такое "нужен гуй" и "студия идет нахуй"? Ты что мелешь вообще? Поехавший
>>1172683Да бля я контрлеры через шаблоны хочу депенси инжектить, чтобы все реактивно в функциональном стиле, солид, кисс, вот эта вся хуйня, буду применять паттерн наблюдатель используя синглетоны и MVVVVC. Мне нужно чтобы легко без ебли с мейками и галпами там, студия меня не устраивает просто, ее мс делали затупки, мне лучше что-то от Линуса Торвальдса или ебашить темплейты на xml под андроид, как думаешь?
>>1172803>Линуса ТорвальдсаЮзай GCC будет тебе счастье.
>>1172568чувак, а ты уверен что тебе не в тред новичнок?отправь его как параметр
>>1172622как параметр
Есть программа, которая с помощью URLDownloadToFile пытается скачать картинки. Каждый раз, она вставляет случайную переменную в ссылку. Так вот, при её запуске в многопотоке, через for (int i = 0; i < threadsCount; ++i) {thr = thread(tryURL);}В одну секунду работает только 4 потока. Как я только не пробовал обходить это ограничение, ничего не получается. InternetSetOption(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &maxConns, sizeof(DWORD));Тоже не сработал. Как сделать чтобы программа в одну единицу времени пробовала 100 разных ссылок?Если нужен полный код этой говнопрограммы, напишите.
Cкомпилится ли на C++ кодint size = 3;double arr[size];???
>>1172679Схуяли? Сделай Build -> Debug x64 вывод sizeof(int). 8 же.
>>1173318Если arr[size] у тебя в автоматической памяти (в теле функции), то в gcc да, но это вроде пока расширение языка от gcc, а не стандарт.
Посоветуйте что почитать для уже более менее знаюшего язык на среднем уровне.
>>1173318в С++17 или в gcc (расширение) - да
>>1173327http://rextester.com/UEUSF17868
>>1173344Мейерс - Эффективное использование С++.
>>1173348>в С++17Што?
>>1173482В компиляторе, который поддерживает стандарт С++ 17-го года.
>>1173482C++17 берет С11, как базовый стандарт С, в котором есть VLA
>>1173498>>1173510http://eel.is/c++draft/dcl.arrayD1 [ constant-expression_{opt} ] attribute-specifier-seq_{opt}
>>1173510А C++11 брал C99 как базовый стандарт. В C99 нет VLA?
>>1173287Бамп
>>1171725Причем тут нахуй типизация? Беды от кривых рук тех кто исходя из неверных знаний матчасти (выделение в автоматической памяти переменных с sizeof(T) != sizeof(T*)) пишет непереносимый код.
>>1173458Ты прав, реально 4 байта. Хз почему.
>>1173930Зависит от системы и компилятора. Размер инта стандартом не определен.
>>1172181delphi
>>1171491Ой не знаю, Qt для этого...Попробуй поюзать WT, там вроде есть всякие шляпные готовые хэндлеры + формы. Он у меня сразу встал с исходников под mvs 17 (+ очень советую vcpkg под винду, конан под линь вроде -это установщики пакетов, гугли)Я бы не советовал прям уж на обычных сокетах все делать - довольно нехилый пердолинг, но если напишешь шаблон который че надо кастует ок. Поэтому попробуй поюзать boost::asio, там абстракция над сокетами - io service -> asio.read/write, примерно такая там логика/инкапсуляция основная. Прям эхо сервер бери пример и попробуй от него отталкиваться. Можно curl для работы с http/https. Если хочешь делать на websockets не знаю что посоветовать, я дохуя чего ставил ради этого но не вышло нормально разобраться (по сути там хэдэры и sha-1/... шлется да и все)Вариантов на самом деле много. Не поленись нарисовать примерно карту проекта хотя бы (uml если сможешь). Лучше с этим поебаться пару дней чем потом блевать и бесцельно копирастить. Добра и минимального TU тебе по времени исполнения.
>>1171518+
>>1171495Индусам спихни. Они тебе быстро наговнокодят. Заплатишь им 50%.
>>1173976Человеческое спасибо.
Почему Студия со временем начинает компилировать хуевый код?Не раз замечал что некоторые вещи от постоянных сборок в студии начинают тормозить.Вот сейчас сделал поворот сцены в GLUT по нажатию мыши, всё было хорошо поворот отображался в следующем же кадре. Чуть позже не изменяя код в повороте, прога не стала отображать поворот в реалтайм, только после того как отпущу мышь. Скопировал тот же код в minGW и там никаких проблем нет.
>>117410799% говнокод
Может кто-то делал игру "Дурак" или кто-то находил хорошую версию. Нужно для курсача в унике.Нашел одну версию, но не могу задебажить проект. Может кто-то поможет в телеге @andisal
>>1174182> в телегеВ этой стране помощи не ищи.
>>11703933 января нулевого (или первого) года, 04:00:00.
>>1171117Можешь часть объектников объединять в либу, а уже её линковать с экзешником.
>>1173287ДА БЛЯДЬ ОТВЕТЬТЕ НА ЭТОТ ПРОСТЕЙШИЙ ДЛЯ ВАС ВОПРОС, 100КК В НАНОСЕКУНДУ ДЕВОЛОПЕРЫ
>>1174283>нулевого1970 же
>>1174296В каком смысле "потоков"? Системных потоков?Код поточнее есть? Платформа?
>>1171491>знания принципа работы клиент - серверНет тут блять никакого особого "принципа". Сервер это тот кто слушает сокет на порту, клиент это тот кто к нему подключается. Собсно все блять, что сделать и какой протокол заюзать или самому придумать - на твое усмотрение.
>>1169708 (OP)Посоветуйте годный туториал по связке Boost.Test с Google Mock.
>>1174802Нашёл наконец, https://www.semipol.de/2010/04/13/using-googlemock-with-the-boost-test-library.html
>>1172181Qt, там есть язык разметки интерфейсов, типа ксамля от мс, только на основе жсона.
>>1171483> если создать на стеке две переменные, размер которых меньше машинного слова (а стек выровнен по машинному слову), то они не будут расположены последовательноПри чём тут какие-то размеры машинного слова?В C++ про последовательное расположение можно говорить для нестатических полей класса или для элементов массива.Два независимых объекта не располагаются ни последовательно, ни непоследовательно.
Аноны, нужна помощьес
>>1174903Слышишь звон, да не знаешь, где он.
>>1174905http://sol.gfxile.net/dontask.html
>>1174911Да читал я всю идиотскую цепочку сообщений.Там сначала инкрементируют указатель на одну-единственную переменную и то, что она не указывает на другую независимую переменную объясняют тем, что там какое-то мифическое машинное слово в штаны им насрало.Хотя стандарт ясно говорит, что получился указатель на первый байт за концом объекта, на который указаывал указатель до инкремента. И что этот указатель не указывает ни на какой объект, даже если случайно по этому байту начинается другой объект.Потом толпа анскильных лалок с удивлением пялится на банальный факт, что если взять адрес у массива, то получится указатель на массив.
В таком случае я не понимаю (я ньюфаг).https://onlinegdb.com/ByOIXzG3GЗдесь в выводе получаетсяValue C: 5555Не выровнены по машинному слову всё же?
>>1174924>Здесь в выводе получаетсяНасрать что там получается.`&b - 1` — UB.
>>1174924>Здесь в выводе получаетсяА здесь https://wandbox.org/permlink/xGGqr6pAqBBFNIxq не получаетсяТ.к. UB.
>>1174926Адрес есть? Есть. Менять можно? Можно.Никто и не берется утверждать, что там ВАЛИДНЫЕ ДАННЫЕ будут, но это к вопросу отношения неимеет, ты тупой какой-то.Создал себе манямирок, где ты прикрываешься ПРАВИЛАМИ в тех случаях, где тебе ЛЕНЬ УЗНАВАТЬ, как всё работает. Ну или просто у тебя болезнь мешать тем, кто хочет узнавать.
>>1174930>Адрес есть? Есть. Менять можно? Можно.Есть. Вычитать как в том коде нельзя. См. стандарт.> Создал себе манямирок, где ты прикрываешься ПРАВИЛАМИ в тех случаях, где тебе ЛЕНЬ УЗНАВАТЬ, как всё работает.Лол. Моим первым языком был асм для x86. Так что не надо мне рассказывать, как всё работает.Просто я отличаю C++ от деталей его реализации. Знаю, что такое спецификации, в том числе языка. В отличие от многих здеся.> Ну или просто у тебя болезнь мешать тем, кто хочет узнавать.Толку от таких псевдо-знаний в стиле "я у мамы хакир и сношаюсь с UB" — нуль.
>>1174933UB имеет НОЛЬ отношения к данному вопросу, тут язык нужен лишь чтоб смотреть в стек.Да, с поправкой на реализацию, но сути это не меняет. Рака жопы тебе, бтв.
>>1174929Ну поменяй знак, получится.https://wandbox.org/permlink/bwt0jUKCWKy8B0pwВсё ещё не видишь, что вопрос не в этом.
>>1174934>UB имеет НОЛЬ отношения к данному вопросуРазные результаты на разных компиляторах — верный признак UB. Я даже указал в чём.>Рака жопы тебе, бтв.Не гори, плиз.>>1174935>Ну поменяй знак, получится.Поменял https://wandbox.org/permlink/O7YCl6k76ebwjbBdНе получается.Лол.
>>1174937Ясно, толстяк.
>>1174939>Ясно, толстяк.В чём я толстяк?
>>1174943Ыбыбы я кароч кампилатер переключил ух как я иво щас ух))))Никто, блядь, не спорит с тем, что это UB, что оно отработает неизвестно как в разных условиях, етц, етц.Но для визуализации вопроса было бы достаточно и просто вывода адресов a и b без всякой арифметики.Но ты просто иди нахуй, псевдо-человек, сын говна.
>>1174943>>1174945А ещё я вообще всегда люблю ковырять хуйню и по-детски радоваться программистским мелочам, вон работа на хронокроссом и все мипсоассемблерскими штуками мне тонну удовольствия принесла, а тут ты такой нудный хуесос: UB, ЗАВАЛИ. Чтоб ты от голода сдох.
>>1174862Ну ты еще напомни, что QML - говно говен в сравнении с божественным XAML, да и в целом WPF >> Qt, жаль только, что .net.
>>1174947>А ещё я вообще всегда люблю ковырять хуйню и по-детски радоваться программистским мелочам, вон работа на хронокроссом и все мипсоассемблерскими штуками мне тонну удовольствия принеслаНайди себе бабу.
>>1174955Мимо.
>>1174956А, ты из этих...
>>1174957Ну не смешно. Не мешала мне любимым делом заниматсья ни предыдущая баба, ни текущая.Даже наоборот.
сап, заранее простите за нубский вопросесть класс (нод дерева) с примерно такими функциями внутри:template<typename T>class Node { public: Node<T> left, right, parent; T data; Node(const T& value, Node<T> par=nullptr) : data(value), parent(par) { left = right = nullptr; } insert(const T& value) { // по сути создает с помощью new нод и присваивает либо левой, либо правой части }почему, при удалении любого нода с помощью delete у корней энивей остаются рабочие ссылки на детей ?из-за того, что сам по себе delete не очищает ничего в памяти, а лишь указывает, что она свободна для новых new ?или я таки где-то проебался ?если нужно могу дописать весь используемый код, лень было заливать
>>1174979left, right, и parent, разумеется, указатели, мейлач почему-то проебал звездочкитеперь я понял, что лучше было не полениться и залить
>>1174979>почему, при удалении любого нода с помощью delete у корней энивей остаются рабочие ссылки на детей ?Что такое "рабочие ссылки"?http://eel.is/c++draft/basic.stc#4 :When the end of the duration of a region of storage is reached, the values of all pointers representing the address of any part of that region of storage become invalid pointer values.Indirection through an invalid pointer value and passing an invalid pointer value to a deallocation function have undefined behavior.Any other use of an invalid pointer value has implementation-defined behavior.
>>1174983значит, что корень может обратиться к удаленному, с помощью delete ноду, и все будет работать так же, как и до deleteт.е. если у меня был вывод: cout << node->tи он выводил, скажем, 10то и после удаления он продолжит выводить 10для меня это оказалось критично, т.к. я делал проверки на наличие детей с помощью node->left и node->rightпо какой-то причине, я решил что delete обнулит указатели, или как-то пометит NUll'ями>Indirection through an invalid pointer valueполучается, это мой случай ?
>>1174988>значит, что корень может обратиться к удаленному, с помощью delete ноду, и все будет работать так же, как и до deleteМожет да, а может нет.>>Indirection through an invalid pointer value>получается, это мой случай ?Да.
Анон, подскажи плиз. Пишу софтинку под винду, которая1. Имеет исполняемый файл и библиотеки.2. Имеет файл настроек, которые могут изменяться пользователем в процессе работы.3. Имеет временные файлы, которые генерируются в процессе работы программы. Как это лучше разместить на диске? Т.е. понятно что п.1. идёт в условные Program filesКуда отправить п.2? В AppData\Roaming\Programname? Но если мы устанавливаем программу для "всех пользователей", то она не сумеет подцепить настройки из чужой AppData (Или забить на это и у каждого пользователя будут свои настройки. Не хотелось бы). Где создавать временные файлы из п.3? В AppData\Roaming\Programname\MyTempData? Что вообще можно почитать по этому вопросу?
>>1174993А у тебя больше одного пользователя предполагается?
>>1174996Ну есть возможность что установил и настроил пользователь-1, а работает в дальнейшем пользователь-2.
>>1174998Если приватность настроек не нужна и разным пользователям не нужны разные настройки, то всё складываешь в program files.
>>1175001А не возникнет проблемы с UAC, админправами и прочим?
>>1175002Проблемы разрешимые.Я пока не встречал среды с подобными политиками локальной безопасности, она обычно внешняя. В крайнем случае дадите права на запись в отдельную директорию, если вдруг таковых нет.
>>1175004Thnks!
>>1174998Если настройки для всех пользователей, то есть же C:\ProgramDataЕсли что папку можно (при установке или первом запуске) создать с нужными правами.> Где создавать временные файлы из п.3?https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa364992(v=vs.85).aspxЛибо взять из переменных сред TMP или TEMP.
Гайз, скажите, это адекватное тестовое задание?Вышлите пожалуйста примеры когда с реализацией ООП в C++ без Qt на почту 1@inmdl.comРеальная история, я не тролль, только что попросил у них полтос на герандос
>>1174948Так он не хотел студию, глаза протри.
>>1175014> ООП в C++ без Qt А какое ООП есть в Qt кроме создания сабклассов QObject (и ему подобных)? mic даже шаблоны не поддерживает (хотя возможность создавать шаблонные qobject'ы в самом qt всё же есть).
>>1175016ну сигналов-слотов они не хотели вангую
>>1175017хотя это не ООП, действительно
Требуемый опыт работы: 3–6 летПолная занятость, удаленная работаНаша компания занимается разработкой для зарубежных компаний.Требования: Нужен опытный C++ разработчик, хорошо если будет знания С# (но не обязательно). Опыт от 3-х лет в указанной области Проект технически сложный, много кастомного кода, поэтому знания каких-то определенных библиотек мы не требуем, нужно просто очень хорошо разбираться в языке и уметь разрабатывать под разные платформы. Опыт использования чистого C++ а не только QT Английский не обязателен.Условия: Офис в центре Преподаватель английского происходит 2 раза в неделю Доброжелательный коллектив Технически-грамотное руководствоАдресЕкатеринбург, улица Добролюбова, 16Email:1@inmdl.com
> Преподаватель английского происходит 2 раза в неделю
>>1175023>Технически-грамотное >этот дефис
>>1175108Чисто Технически - грамотное руководство
Имеет ли вообще смысл пихать STL контейнеры в динамическую память? Они же, блядь, сами активно используют её. Если с помощью new или там allocate делать, строки например, то какая часть мяса будет в динамике, или там только методы класса с указателем на другую динамку где уже лежит конкретно мясо?
>>1174979ты деструктор-то покажи может.
>>1175001возникнет. на всех свежих виндах, если пользователь не админ - программа в програм филес писать не может. в свою папку дллки класть. конфиги а аппдату. но вообще поищи. у микрософта был гайдлайн четкий куда что класть.
>>1175147>конфиги а аппдатуТак сейчас и делаю. Только не в саму аппдату, а в програмдату как советовал >>1175013 , должно прокатить. А гайдлайны искал, что-то они не всплыли до решения в /pr/
>>1174412Платформа виндаvoid tryURL(){ randURL.clear(); for (unsigned short i = 0; i < urlLength; i++) { randURL = randURL + alphabet[getRand()]; } HRESULT URLdown = URLDownloadToFile(NULL, LPCWSTR((beginURL + randURL + endURL).c_str()), LPCWSTR((resultDir + L"/" + randURL + endURL).c_str()), 0, NULL); if (SUCCEEDED(URLdown)) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), GREEN); wcout << L"Downloaded! " << endl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), WHITE); }}int main(){ CreateDir(); thread thr[threadsCount]; while (1) { for (int i = 0; i < threadsCount; ++i) { thr = thread(tryURL); } cout << "100 threads done" << endl; for (int i = 0; i < threadsCount; ++i) { thr.join(); } cout << "100 threads joined" << endl; } system("pause"); return 0;}Мне нужно, чтобы одновременно 100 запросов было. А в системе где то ограничено на 4. UrlMkSetSessionOption пробовал, ничего не меняется.
Это что, мне вместо этой хуйни надо curl прикрутить? Пиздец, сложно
Чо про потроха почитать - ну там vtable, ромбовидное наследование и прочая ебень.
>>1174916Жопой ты читал. Речь не о стандарте, а о его реализации на машинах x86 - о выделении автоматической памяти на стеке. int main(){int x, y;} // две переменные в автоматической памяти, стандарт об этом нихуя не говоритНо на домашних компьютерах эти переменные будут выделены на стеке. Казалось бы последовательно, но на самом деле выровнены по границам 4 / 8 байт. Хули тут непонятного?
>>1175541Два шорта по какой границе будут выравнены?
>>1175545По границе машинного слова.
>>1175550Вычитание одного адреса из другого дало 2.
>>1175541>Жопой ты читал. Речь не о стандарте, а о его реализации на машинах x86 - о выделении автоматической памяти на стеке. Это ты жопой читал. Речь шла о том, нафига вообще знать, сколько байт занимает тот или иной тип. Дальше начался цирк с конями.>две переменные в автоматической памяти, стандарт об этом нихуя не говоритОткуда ты знаешь, что в автоматической памяти, если стандарт об этом нихуя не говорит?>Но на домашних компьютерах эти переменные будут выделены на стеке.А на пикрелейтед они вообще не выделены, потому что компьютер не домашний, а удалённый?
>>1175550Этот >>1175552 опередилНо всё равно приложу пикрилВидимо, на x86-64 машинное слово это 2 байта.
>>1175567Мы разговаривали о реализации Стандарта (тм) (с) на своих домашних пекарнях, ты ворвался с криками "поведение не определено покпокпок". Это конечно охуительно ценная инфа, но разговор немножко не об этом.
>>1175572>Это конечно охуительно ценная инфа, но разговор немножко не об этом.Инфа типа >>1175550>По границе машинного слова. (особенно с учётом того, что это не так)видимо, на порядок ценнее.
>>1175570Окей, я сливаюсь.
Охуеть, то есть они всё же подряд идут. Только я уже забыл, к чему всё это было.
>>1175576>Охуеть, то есть они всё же подряд идут.Ага.
>>1175579>>1174924Ну я с этим уже приходил вчера.
>>1175576>Охуеть, то есть они всё же подряд идут.В разном порядке в зависимости от уровня оптимизации.А в clang — не подряд. Но выровненные по 4 байт. Это считается размером машинного слова на 64-битной системе?
Какой наиболее простой способ скачать файл кроме urldownloadToFile??
>>1175654как я понимаю эта штука из com интерфейса интернет эексплорера. там могут быть всякие мутные внутренние ограничения.ты не пробовал в начале программы всякие CoInitializeEx вызывать с разными параметрами?я б вообще curl использовал.
>>1173287>В одну секунду работает только 4 потокасколько ядер у твоего проца?
>>11756814>>1175672я посмотрел, сложновато он подключается
Я слышал, что в С++ 20 добавят модули. Это будет примерно как в питоне, и без ебатории с .h файлами?
>>1175705Хо-хо. Мне кажется пока все библиотеки не перейдут на модули, ебатория все ещё будет. Ну и макросы в модулях не поддерживаются.
>>1175705Я это ещё про 17 слышал.
>>1175681>сколько ядер у твоего проца? А какая на хрен разница? Если речь о конкурентности а не о тру-параллелизме.
>>1175699>4
Посоны, на крестоконфу идет кто на этой неделе?
>>1175770я все знаю о чем там будут балакать
>>1175773Ну так ясен хер, расписание же висит.Хоть на Александреску живого посмотрю.
>>1175774дык александреску отошел же от крестов, о чем он там балакать будетно зато будет вандервоод, саттер
>>1175776Про оптимизацию. Но один хуй он наверное компетентнее всех кто там будет вообще.Жаль что не про дишечку.
>>1175709>макросы Рак языка.А не, извините, перепутал с темплейтами.
>>1175950>А не, извините, перепутал с темплейтамиЧего в них плохого? В C# они тоже есть.
>>1175705>Это будет примерно как в питоне, и без ебатории с .h файлами? Заголовочные файлы и ебатория останутся. Единственная разница - с модулями конпелятор будет знать, когда ему надо парсить .h заново, а когда - нет.
Мм, есть один проект из 00, его перекомпилировали на vs9.Прошло время и мне необходимо теперь этот проект компильнуть на х64, сделал конфиг в студии, он автоматически настроился, а на выходе я получаю 2019 ошибки линкера. Курение манов не помогло, куда еще копнуть? Проект юзает oci ( Oracle C libs) .
https://github.com/hex4d0r/hCryptКороче, Два.сн, есть исходники криптора на cpp. Помогите скомпилировать, у самого не получается. мимобыдлокодер
https://github.com/SandPox/Polymorphicну или этот
>>1175982ответ очевиден: твоей квалификации явно недостаточно для выполнения данной модернизациилучшее решение - уйти из отрасли, оставив место более компетентным людям
>>1176007в такие проекты обычно специально вставляют "детские" ошибки, чтобы оградится от некомпетентных людей типа тебяне троллюищи в коде пару мест, исправляй
Подскажите, как на плюсах в линуксах (одинаковые дистрибутивы) обеспечить портируемость программы, когда я использую сторонние библиотеки? В винде понятно, условно кидаешь к экзешнику нужные библиотеки и все. А как дела с линуксом обстоят?
>>1176014самый правильный, наверное, способ: через пакеты, менеджеры пакетов, типа deb - dpkg - aptлибо делают статическую линковку с библиотекамисейчас еще можно легкую виртуализацию использовать, докер, напримерв общем, решение будет зависеть от того что за софт ты пишешь
>>1176018я вот нагуглил статическую линковку. Пару библиотек opencv надо для обработки изображения. И, возможно, cuda. Хотя на обеих машинах она должна быть в теории.
Посоны, в boost случаем нет статических векторов типа std::array, но чтобы имитировали поведение динамических.То есть чтобы size() выдавал разные значения и можно было делать push_back до установленного в шаблоне предела. Лень самому писать.И ещё, кто-нибудь копался в устройстве STL? Это будет очень сложно вытянуть оттуда std::array и слегка допилить его напильником?
>>1176204в векторе резервируешь памятьдальше работаешь с нимвсе
>>1176212>>1176204или те на стеке надо обязательно?
ну а вообще в бусте аж несколько реализаций векторов на статике, выбирай
хотя я в этом не разбираюсьсорри
>>1176204static_vector
>>1176229>>1176219Вот это охеренно, то что нужно. Хз почему я сам найти не мог, вроде зашел на страницу буст со списком контейнеров, но там не было.>>1176213Да, именно что на стеке надо, а может я просто ебло.Короче в проекте считается всякая математика, а в качестве векторов используются std::vector, при том что чаще всего размеры небольшие 2-10 элементов и известны заранее.Когда пришло время распараллелить это дело std::threads, выяснилось, что производительность не растет. Долго над этим бился и пришел к выводу, что динамические вектора кучу насилуют. Подключил tcmalloc, всё равно плохо.Заменил по возможности вектора на статические массивы и производительность относительно одного ядра сильно увеличилась. Хочу ещё увеличить, поэтому надо все стандартные вектора выпилить.Пытался найти способ сделать раздельные кучи для тредов, но как-то безуспешно.
>>1176251>Долго над этим бился и пришел к выводуНа кофейной гуще погадал?
>>1176252Сначала думал, что там какие-нибудь глобальные переменные переписываются, или мьютексы где-то спрятаны, про которые я не знаю, может false sharing влияет.Короче поставил замер времени на вычислительную функцию, потом начал из неё по чуть-чуть выпиливать куски. В результате внутри этой функции остались только вектора, которые в цикле создаются.Ну и ещё по ходу дела установил, что пропускная способность памяти на моем ПК примерно в 2.5 раза больше, чем скорость записи с одного ядра. Соответственно это предельное ускорение для вычислительных программ.Поэтому теперь тестирую на узле с 32 ядрами.
>>1176251>Долго над этим бился и пришел к выводу, что динамические вектора кучу насилуют.Там выполняется поиск свободного места в куче, наверное.
Аноны, написал я короче код(ну как написал, частично списал), но он не работает - 9 ошибок.Прилагаю скрин с Code::Blocks.https://pastebin.com/Dj0rrWb6Оригинал кода:https://www.youtube.com/watch?v=hBgHeC2EdvsТыкался, но ничего из этого не вышло,ПАМАГИТЕ!
>>1176251>а в качестве векторов используются std::vectorИспользуй Eigen
>>1176467Что ж ты, блядь, за человек такой.Тебе компилятор сам все сказал - "не могу неявно преобразовать типы, не могу найти переменную в области видимости и ты не закрыл скобку во втором ифе на 118, сука, строке".Нет, ты серьезно? У тебя же есть все данные по ошибкам. Куда ты там тыкался?Замени wchar на char (или найди в windows.h такую же функцию с wchar аргументами - обычно ФункцияНэймW), объяви в нужном месте SelfAutorun и убери нахуй первую скобку во втором ифе на 118 строке или закрой уже не.
>>1176490> Тебе компилятор сам все сказалДва чаю. Это тебе не искать опечатку в шаблонном коде, когда компилятор выдаёт пол-сотни ошибок и ни одна из них не говорит в чём дело. Например если при вызове шаблонной функции указал один из нескольких параметров и ошибся с ним, а компилятор вместо остальных подставил хуйню и спустя пару вызовов жалуется именно на свои додуманные параметры, а не на мой - неправильно указанный.
кто знает, как socket'ы подключить(в частности -lws2_32) к gcc?
>>1176467Пиздуй отсюда мамким хакир.
>>1176467https://pastebin.com/FtF44d06Все исправил, нужно было просто libws2_32.a из mingw для работы с сокетами поставить.Но на почту так и не отправляет,для теста не забудьте свой емейл указать и loglength с 1000 сменить на 10я вообще не понимаю, почему должно отправляться письмо, ведь пароль не указан
>>1176504На винде-то? Попробуй #pragma comment(lib, "ws2_32.lib")
bump
>>1176819sage
Объясните тупому что такое move и &&ссылки ан rvalue. Как эта хуйня работает?На какой нибудь простой аналогии, ну там про говно берёзу и ветер.
>>1177024По большей части они нужны для указанию компилятору, что тот кто вызывает функцию отказывается от этих объектов и больше их использовать не будет. Используется например в unique_ptr, чтобы убедится, что не будет существовать двух копий этого объекта (в этом случае конструктор копирования удаляется и разрешается только перемещение). Либо указывает на возможность перемещения контейнера, чтобы не копировать всё содержимое, поскольку явно указывается, что он больше не будет нужен и вызываемая функция может с ним делать что угодно.
>>1177024>moveТупо каст к xvalue. Часто говорят про каст к rvalue, не желая различать xvalue и prvalue, что ОК.Безграмотные говорят про каст к rvalue-reference, что не ОК.Можно было бы самому кастить, юзая static_cast, но вот комитет решил ввести такую фукнцию, т.к. если в коде видно move, то сразу понятно, что хотят сказать, а если там static_cast, надо вглядываться, что же он на самом деле делает.>&&ссылкиПроще почитать самому http://eel.is/c++draft/dcl.ref http://eel.is/c++draft/dcl.init.ref , чем ждать объяснения, благо, там не много.
>>1177024>rvalueА про это тут http://eel.is/c++draft/basic.lval
>>1177024>На какой нибудь простой аналогии, ну там про говно берёзу и ветер.Хз, на практике понятнее.std::vector<int> a(1000, 0);std::vector<int> b = a;В данном случае динамически выделится память под 1000 элементов, и все элементы из a скопируются туда.std::vector<int> b = std::move(a);В данном случае никакого копирования вообще совершать не надо, b просто забирает указатель на данные. После выполнения b.data() становится равно a.data() (в начале программы) a.data() становится nullptr.
>>1177051std::move на любые указатели действует, не только на смарты?
>>1177110std::move действует на любые типы, ему похрен. Хоть на функции.
>>1177110На массивы действует тоже. В общем, на любые.
>>1177116Что-то у меня не получается с массивами. Дай пример.
>>1177193int a[2];std::move(a); // вызвал move для массива
>>1177221Но куда ты мувнул этот массив? Перепробовал несколько вариантов, либо компайлер выдает ошибку, либо массив а остается прежним. Конкретный пример не можешь дать? С std::vector-ом то все понятно, а вот с обычным массивом, нихуя.
>>1177229>Но куда ты мувнул этот массив?Никуда. Зато можешь мувать из него элементы.Кстати, вот https://wandbox.org/permlink/VOb4z5ZUnVZ2aMDnЕсли кто-то будет тебе говорить, что E1[E2] эквивалентно *((E1)+(E2)), можешь спрашивать, почему при замене 1 на 0 в #if начинает вызываться copy-конструктор вместо move-конструктора.
>>1177232Что за пиздец
>>1177233Не нравятся макросы — хуяч руками.
>>1177269Лучше объясни — что там происходит.
>>1177221То, что ты пишешь, не имеет смысла. Я вижу только одно вменяемое применение std::move, когда под объект уже выделена память в куче, а ты просто меняешь владельца выделенной памяти. Аналогично примеру с векторами можно создать unique_ptr на массив в динамической памяти и двигать этот указатель, тогда в каждый момент времени массивом будет владеть кто-то один (переменная/класс).Как уже выше говорили, std::move сам по себе ничего не перемещает, он просто преобразует к && и вызывается конструктор перемещения, вместо конструктора копирования.Таким образом, если вызвать std::move(some_object); ничего не произойдет, никакой конструктор не вызовется, а some_object не испарится.class Foo {vector<int> a;Foo(const Foo& foo) : a(foo.a) { } // создается новый векторFoo(Foo&& foo) : a(std::move(foo(a)) { } // теперь класс владеет вектором, который был у foo}
>>1177317>То, что ты пишешь, не имеет смысла.Жизнь вообще бессмысленна.
>>1177317
Анон, обосри сделай, пожалуйста, код-ревью моего проекта и расскажи, что в нем плохо с точки зрения архитектуры и кодеса.Задача: разработать систему расчета зарплаты для Employee, Manager и Sales на Qt. В формулах расчета ЗП учитывается число подчиненных. Данные берутся из базы SQLite. Подчиненных могут иметь Manager и Sales, древовидная структура подчиненности может быть любой глубины, поэтому я ичпользовал паттерн компоновщик, чтобы можно было работать с частями дерева как с одним целым.https://github.com/aeshes/work/tree/master/SalaryCalc5/src
>>1177418Нууу да. Я об этом и говорю.Просто таким же образом можно не весь объект переносить, а только его внутренности, и это быстрее, чем копировать полностью.Кстати, я хотел спросить, а что за чуваки тут сидят на постояннке? В чем профит сидеть чужие коды разбирать, на вопросы отвечать и всякое такое?
Александреску расписался на моем бейджике на конфе. В рамочку поставлю
>>1177471Бля. А я не стал автограф брать - на блокноте было стремно, знал бы заранее - книжку бы взял (по дишечке, азаза).Календарик от ПВС студии нафармил?
>>1177427Использовать qt но тесты от гугла... Ты ебанутый? Зачем?
>>1177473Нет, забил. А завтра мне вообще выступать ололо диванон
>>117747910 человек. Маловато для диванона. Какой track хоть?
>>1177483Тьфу, многовато в смысле.
>>1177479Дима, ты?
>>1177483Не скажу :(
Блять нахуя в С++ добавали brace initialization, ну например int a{4}. Это же пиздец как неудобно и не интуитивно, и только добавляет языку лишнию комплексность. Я понимаю когда инициализируешь массивы, это удобно. Но эту хуйню можно как я понял везде хуячить.
>>1177505Тоже бесит. Почему бы блять просто массивы как в дишечке в скобках квадратных не объявлять, тогда ни с чем никогда не спутаешь.А того что нужно, ну, чтобы сразу поля по имени инициализировать - это как раз таки хуй добавили.
>>1177505struct Zalupa {bool hui;char pizda;};std::vector<Zalupa> zalupki;zalupki.push_back({false, 'a'});
>>1177518И че, не могло бы распарсить zalupki.push_back(false, 'a') ?
>>1177521error: no matching function for call to ‘std::vector<main()::Zalupa>::push_back(bool, char)’
>>1177518>>1177521Вы про емплейс слышали?
>>1177525Пушбэк делает эмплейс, если видит rvalue.
>>1177525Это сейчас к предмету разговора отношение не имеет.Суть в том, что make_typle сука без скобок аргументы хавает и передает в конструктор - мог бы и бушбак догадаться, если пушим структуру и то что передается - по параметрам подходит в конструктор.
>>1177505Да с этой хуйней еще накосячить можноstd::vector<int> v(3, 9); std::vector<int> v{3, 9};Первый вариант создает, как и ожидается, три элемента с числом 9. А вот второй вариант создает всего два элемента с числами 3 и 9. Некоторые дауны еще говорят, чтобы использовать эти инициализаторы где только можно! А я скажу, если точно не уверен, то лучше не использовать их. Но у них есть одна приятная фишка - они не позволяют скрытые касты. Например:int anal = 6.9; // нормint anal{6.9}; // ошибка компайлера
>>1177511GCC кстати давно умеет делать >FooBar fb = { .foo = 12, .bar = 3.4 };но это расширение компилятора, причем эта фича есть в сишке
>>1177564> причем эта фича есть в сишкеВот зачем было убирать? Один пидор с гцц ебашит это у себя, а у меня потом не работает.
>>1177436Ну а что за десятки тысяч чуваков сидят на стэковерфлоу и подобных сайтах? Это интересно, даешь советы, сам скиллы немного прокачиваешь, читаешь срачи и тд. Плюс бывает инфа интересная. Кароче, лично я, если заняться нечем, больше люблю тут посидеть, чем листать фид в фейсбуке.
Code::Blocks подходит для окон? Началось программирование приложений, все методички дают по студии, а я не хочу насиловать некроноут (8 годиков) этим монстром. Смогу ли пользоваться MFC и что для этого надо сделать?Есть какие-нибудь уроки по настройке Code::Blocks для разных целей? Насколько я понял, его можно под себя допилить и докачать нужное
>>1177605>MFChttps://wiki.wxwidgets.org/WxWidgets_For_MFC_Programmersа вообще, если доставишь либы и дллки от студии, то сможешь и нативно собрать небось
>>1177505Ты ничего не понимаешь в С+https://www.linux.org.ru/forum/development/22475
>>1177612Однажды я сидел у себя в офисе, и мне пришла в голову небольшая идейка,как хоть немного восстановить баланс. Я подумал: интересно что же было бы,если бы был язык программирования с такими широкими возможностями и такойсложный для изучения, что никто бы уже не смог заполнить рынок толпойпрограммистов, пишущих на этом языке? У меня уже были тогда кое-какие мыслипо этому поводу. Вот, знаете наверно, X10 и X windows. Это тогда была такаяграфическая система, которая работала на этих самых Sun 3/60. У нее были всеингредиенты, которые мне были нужны - комплексный синтаксис, неявноопределенные сложные для понимания мрачные функции,псевдо-объектно-ориентированная структура. Даже сейчас никто не пишет чистыйкод X-windows. Motif - единственный путь, если хочешь сохранить здравомыслие.
>>1177560Эта штука и сделана, чтобы не было неявных кастов.
>>1177612Нас наебали, все в питоно-тред.
>>1177605Пердолиться лишний раз со всеми библиотеками, ну его нахуй. Завезут тебе виндовс формс в следующем семе в расчете на то что никому переезжать со студии не надо, и крутись как хочешь.
>>1177505int a{3.1} дает ошибку например, несужающая инициализация
Есть бутлег конфы питерской где-нибудь?
Вечер, анон. Можно ли заставить clog выводить в отдельный терминал только средствами бибилиотеки, или придется использовать винапи?
>>1177612>Вы в это так верите? Попробовали ли вы когда-нибудь сесть и поработать над проектом на C++ ? Во первых, я расставил достаточно ловушек, чтобы просто так работали только тривиальные проекты.>Понимаете теперь? И я уверен, что он заслуживает этих денег. Отслеживание всех этих ловушек, которые я встроил в C++ - не легкая работа. И, как я говорил раньше, каждый программист на C++ чувствует себя связанным тем обстоятельством что он должен использовать каждый элемент языка в каждом проекте.Да этот Страуструп поехавший маньяк! А те программист, о которых он говорит - мазохисты.
>>1177474Уже нашел документацию по встроенным в Qt тестам.Как можно улучшить проект? >>1177427Что с ним не так?
>>1177701Осиль уже Ncurses педрила
>>1177613>X10Да и 11 такая-же говнина слава боженьке перешли на wayland, не прошло и три десятка лет бляд
>>1177757В /s/, довун.
>>1177317>Как уже выше говорили, std::move сам по себе ничего не перемещаетСпасбо, Капитан К.О.Я просто демонстрировал, что можно вызывать с массивами.
Аноны, объясните как работают токены? Вкатываюсь, читаю, все понятно, пока не увидел эту таблицу, эту вонючую таблицу, что за хуйня?
>>1177961'8', я так понимаю, это «код» токена для (целых) чисел?
>>1177965Да, value
>>1177967value это 11 и 12, а '8' (или что там написано?) это kind
>>1177968Почему kind для разных value одинаковый?
>>1177970Потому что это токены одного kind'а
>>1177971И как компилятор различает их, если они записываются оба как '8'?
>>1177972А зачем их различать?
>>1177973Чтобы посчитать
>>1177975Как-то такstd::count_if(begin(tok), end(tok), [](const auto& t) { return t.kind == '8'; });
>>1177024Нет никаких аналогий для того, чтобы описать очередной шизофазийный бред Комитета.Читай. Только нормальное читай, критическое, а не восторженные вопли крестоблядей, которым всё божья роса. Про rvalue и std::move рекомендую почитать вот это: http://ericlengyel.blogspot.nl/2017/11/some-thoughts-about-rvalue-references.html
>>1178096>http://ericlengyel.blogspot.nl/2017/11/some-thoughts-about-rvalue-references.html> the information about whether a variable is an rvalue reference is peeled off whenever its evaluated in an expression> The moment b appears in the expression, it's converted to a plain value of type B.Бля, прям бальзам на душу. Хоть где-то знают, что в выражениях нет ссылок.
>>1178096Ну а в остальном, очередное шизофазийное предложение от неосилятора:Something interesting that would be possible with the transient qualifier that is currently not possible in C++ is to explicitly declare a named object to be transient.It's also possible to have pointers to transient objects. I obviously haven't had a chance to try this out because it's not implemented anywhere, but I could see how the following code might be useful. void ConsumeObject(transient X& x); void foo() { transient X object; object.CalculateSomething(params...); ... ConsumeObject(object); }Теперь надо следить, чтобы кто-то до ConsumeObject не спиздил объект. Возможно, придётся ввести новую функцию (шаблон):T& std::dont_move(transient T&)Которая будет защищать от случайных перемещений.И код, который сейчас выглядит какdo_x(object);do_y(object);do_z(object);consume(std::move(object));Писать какdo_x(std::dont_move(object));do_y(std::dont_move(object));do_z(std::dont_move(object));consume(object);Genious!!! Brilliant!!! Долбоёбам типа >>1178103 и их кумирам, пишущим бредятину в бложик — бурные, долго не смолкающие аплодисменты, переходящие в овацию.
>>1178110>Долбоёбам типа >>1178103 Ну бля)))Конечно же, типа >>1178096
>>1178110> std::dont_moveТаки да. Что мне не нравится в этой идее, что может произойти UB есть в определение функции добавить transient и не пройтись по всем её вызовам. Ведь конпелятор C++ не следит за временем жизни переменных и (скорее всего) ничего не пискнет если объект будет передаваться два раза (хотя м.б. статические анализаторы помогут в этом случае). Правильней было бы указывать transient как в определении функции, так и при вызове (так например сделана передача примитивов по ссылке в C#: ключевое слово ref нужно указывать везде). Правда тогда это почти ничем не будет отличаться от &&-ссылок и std::move.
>>1178119> и не пройтись по всем её вызовамИ что ещё хуже из-за шаблонов с утиной типизацией в C++ практически нереально сделать нормальный поиск вызовов функций: только по совпадению названия.
>>1177575> Вот зачем было убирать? Его никто не убирал. C++ и C развиваются независимо, просто в С эта фича была добавлена позже. Кстати, в C++20 её тоже хотят добавить.
>>1177972Компилятору похер. Преобразование какого-либо символа из потока cin в определенный токен осуществляется в функции get_token() (читай дальше, как она устроена внутри). Далее уже работаем не с отдельными символами типа '(', '3', '+' и т.д., а с токенами. Да, эти главы с калькулятором в Страуструпе довольны сложны для понимания вкатывальщику (я сам такой, много я затратил времени, чтобы разобраться).
Вот есть у меня какая-то программа на cpp. Можно ли как-то поднять сайт, который будет вместо движка использовать эту программу, причем сервер поднят на каком-нибудь левом языке.
>>1178163Можно, чому нет? Делаешь на плюсах rest-сервер (либо вебсокетный сервер, но это чуть сложнее) и жс сможет напрямую подключаться к нему.
Объясните позязя почему в других языках можно инициализировать статическую переменную в классе и придать ей значение там же, а в c++ низя?
>>1178178> а в c++ низя? Начиная с C++17 можно. Гугли inline variables. Впрочем можно было и раньше, просто более геморно.
>>1178178Вот так можноstatic const int a = 5;
>>1178163http://lectureswww.readthedocs.io/5.web.server/cgi.html
>>1178183Это будет работать только с примитивными константами. Для всего остального (начиная с C++17) можно писать static inline const int a = 5;илиstatic inline int a = 5;
>>1178178Потому что нет никакого класса, есть только его объявление.
>>1178186Ты дурак? Можно вообще писать без cpp-файлов, а с шаблонами по-другому и не выйдет. Вся эта хуета со статическими переменными нужна из-за особенности работы линковщика. Раньше приходилось выёбываться с шаблонами. Сейчас можно делать встраиваемые переменные.
Анон, я тут что-то впёрся. Хочу сделать запрет на создание второго экземпляра приложения и передачу из него аргументов командной строки перед его уничтожением. Сначала пытался реализовать блокировку 2+ приложения, при помощи QSharedMemory, но у меня не создавался второй, четвёртый, шестой, ...., но создавались третий, пятый, седьмой, ...Я забил на это и оставив QSharedMemory для передачи аргументов командной строки, сделал блокировку 2+ приложений при помощи виндомьютексов. Теперь приложения блокируются норм, но аргументы передаются только из второго вызова приложения. 3+ вызовы не передают аргументов. Насколько я понимаю, у меня на каком-то этапе происходит что-то нехорошее с QSharedMemory, но я не могу понять где. 1 пик - код конструктора основного класса программы. 2 пик - код загрузки данных в QSharedMemory3 пик - код получения данных из QSharedMemory4 пик - вывод, обозначены сторонние попытки запуска приложения. 1 - 2 приложение, пересылающее аргументы нормально. 2 - 3 приложение - не пересылающее аргументы.
>>1178195Что мешает использовать элементарные сокеты? Ими можно и наличие запущенной программы проверять и данные отправлять.
>>1178202>Что мешает использовать элементарные сокеты? Ими можно и наличие запущенной программы проверять и данные отправлять.В целом ничего, за исключением того что первые нагугленные варианты были - QSharedMemory и системный мьютекс+сообщение. Ну и интересно, что у меня не работает.
>>1178204>>1178195Всё ок. Переборщил с QSharedMemory::detach()
Я нихуйа не понялАнанасы, ткните носом. Все форумы облазил, остался двач.Есть базовый класс и 9000 наследников, в каждом переопределяются несколько виртуальных методов. Хочу, чтобы по выбору юзверя о'бект вызывал их из определённого наследника.Пробовал так:Обьявил указатель на об'ект базового класса;Свитч, каждом кейсе пишу objectname = new childClass, где childClass меняется.Об'ект вызывает метод из базового класса.Как добавить мозгу в голову?
>>1173318Я нуфаня, но для статических массивов переменная size должна быть const size вроде же, не?
>>1178243а может (unsigned int)size?
Для программирования звука насколько актуально с++ осваивать?Смотрю проприетарный софт всякий вроде pianoteq на нём написан.Секвенсоры тоже на крестах пишут? А всякие сорта синтезаторов?
>>1178304По моему вообще весь около-звук пишется на крестах, т.к. ты не можешь себе позволить, пока ДЖАВУШКА ПАРУ МИНУТ ПАМЯТЬ ПОЧИСТИТ
>>1169708 (OP)Аноны, help. Занимаюсь по учебнику Страуструпа "Программирование принципы и практика", дошел до 12 главы, пытаюсь установить библиотеку FLTK. Скачал её с сайта Страуструпа, по инструкции в приложении открыл проект, нажал построить.Вот что выдает:Не удается открыть файл включение: stdio.h: No such file or directoryЭто сообщение повторяется много раз. До этого жаловался на отсутствие SDK 8.1, я его установил.
>>1178326У страуструпа не учебник, а референс. Вернись к нему через год, а пока читай Стивена Прату
>>1178332Вопрос был не о том. И это не первая моя книга о C++
>>1178333ну раз ты такой умный - ебись сам
>>1178326Скачай лучше свежую версию с оф. сайта fltk.
>>1178365Её тоже скачивал. Та же проблема.
>>1178368Тогда выкинь свой говнокомпилятор на помойку и скачай нормальный: последнюю студию или mingw64 7.2.0 - 7.3.0 и собирай cmake'ом (сам так делал неделю назад, все собралось норм).
>>1178370Как-то не могу разобраться как с помощью Cmake(раньше никогда ей не пользовался) собрать в VS.
>>1178376Не, я имел ввиду CMake использовать вместе с MinGW (хотя и со студей можно, но не необязательно). Короче, вот охуенный гайд, которым я сейчас только что собрал fltk:1) Устанавливаешь Visual Studio 2017 Community вместе с Visual C++ (Desktop develpoment with C++ при установке);2) Качаешь это: http://www.fltk.org/software.php?VERSION=1.3.4&FILE=fltk/1.3.4/fltk-1.3.4-2-source.tar.gz и распаковываешь всю папку;3) Далее просто открываешь этот файл fltk-1.3.4-2/ide/VisualC2010/fltk.sln щелкаешь Ок, ждешь пока в нижнем левом углу не будет написано Ready. Далее нажимаешь F7 и ждешь несколько минут. Все. Теперь в папке lib лежат необходимые файлы.
>>1178389Спасибо, собрал.
>>1169708 (OP)Снова Аноны, help.Занимаюсь по учебнику Страуструпа "Программирование принципы и практика", дошел до 12 главы. Окей fltk я собрал теперь встала другая проблема, но с файлами из учебника у меня проблема. Указал все в свойствах проекта как в приложении Г кроме comct132.lib(говорит что не может его открыть), также не добавил в "Игнорировать все стандартные библиотеки" libcd.lib (говорит что это туда писать нельзя). По итогу после компиляции куча ошибок линовщика:1>------ Сборка начата: проект: 1, Конфигурация: Debug Win32 ------1>fltkd.lib(Fl_Image.obj) : error LNK2005: "public: __thiscall Fl_Image::Fl_Image(int,int,int)" (??0Fl_Image@@QAE@HHH@Z) уже определен в Graph.obj1>fltkd.lib(Fl_Input.obj) : error LNK2005: "public: __thiscall Fl_Output::Fl_Output(int,int,int,int,char const *)" (??0Fl_Output@@QAE@HHHHPBD@Z) уже определен в GUI.obj1>Graph.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall Fl_Image::color_average(enum Fl_Color,float)" (?color_average@Fl_Image@@UAEXW4Fl_Color@@M@Z)"1>Graph.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl fl_color(enum Fl_Color)" (?fl_color@@YAXW4Fl_Color@@@Z) в функции "public: void __thiscall Graph_lib::Shape::draw(void)const " (?draw@Shape@Graph_lib@@QBEXXZ)1>Graph.obj : error LNK2001: неразрешенный внешний символ ""enum Fl_Color fl_color_" (?fl_color_@@3W4Fl_Color@@A)"1>Graph.obj : error LNK2001: неразрешенный внешний символ ""int fl_font_" (?fl_font_@@3HA)"1>Graph.obj : error LNK2001: неразрешенный внешний символ ""int fl_size_" (?fl_size_@@3HA)"1>GUI.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall Fl_Input::draw(void)" (?draw@Fl_Input@@UAEXXZ)"1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Fl_Widget::show(void)" (?show@Fl_Widget@@QAEXXZ) в функции "public: virtual void __thiscall Graph_lib::Widget::show(void)" (?show@Widget@Graph_lib@@UAEXXZ)1>Simple_window.obj : error LNK2001: неразрешенный внешний символ ""public: void __thiscall Fl_Widget::show(void)" (?show@Fl_Widget@@QAEXXZ)"1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Fl_Widget::hide(void)" (?hide@Fl_Widget@@QAEXXZ) в функции "public: virtual void __thiscall Graph_lib::Widget::hide(void)" (?hide@Widget@Graph_lib@@UAEXXZ)1>Simple_window.obj : error LNK2001: неразрешенный внешний символ ""public: void __thiscall Fl_Widget::hide(void)" (?hide@Fl_Widget@@QAEXXZ)"1>E:\Projects\OWN\C++\Программирование. Принципы и практика с использованием C++\12\Задание\1\Debug\1.exe : fatal error LNK1120: неразрешенных внешних элементов: 81>Сборка проекта "1.vcxproj" завершена с ошибкой.========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
>>1178220Проверь именно переопределение с помощью override. Может ты скрываешь из-за разной сигнатуры. Override покажет это
>>1178304Гугли intel IPP. Либа для ЦОС
>>1178318>>1178434Спасибки.
>>1178425>comct132.libдержи в буффер обмена с вертушки: COMCTL32.LIB >это туда писать нельзячекбокс Игнорировать все стандартные библиотеки отмечен?>уже определен в Graph.objпопроб пересобери начисто
>>1178326apt-get install
>>1178431Ага, починил, аригото. Теперь следующий лвл хз как такое искать:Есть отдельный класс jopa с кучей полей - об'ектов дочерних классов от того базового. Пытаюсь заполнять их через jopa-метод add(className objectName), где className - имя одного из наследников, а имён этих 9000.При отправке в любую функцию об'екта любого производного класса, определённого как в прошлом посте, он воспринимается как об'ект базового. Нахуячил 9000 одинаковых функций с разными типами, add от базового класса запилил как virtual но при попытке скопировать под'ехавшый об'ект в нужное поле jopa всё равно получаю от компилятора по ебалу.Как вырезать лишнюю хромосому?
>>1178559> Есть отдельный класс jopa с кучей полей - об'ектов дочерних классов от того базового. Пытаюсь заполнять их через jopa-метод add(className objectName), где className - имя одного из наследников, а имён этих 9000.add(className #objectName);Где # указатель. Макаба звездочки сжирает. > При отправке в любую функцию об'екта любого производного класса, определённого как в прошлом посте, он воспринимается как об'ект базового.Когда ты передаешь в объект метод с помощью копирования - копируется только базовая часть класса. Через указатель нет. Ну и соответственно поля должны быть указателями, а не агрегируемыми объектами.> Как вырезать лишнюю хромосому?Читать книжки блядь, там всё написано
>>1178559> Нахуячил 9000 одинаковых функций с разными типами, add от базового класса запилил как virtual но при попытке скопировать под'ехавшый об'ект в нужное поле jopa всё равно получаю от компилятора по ебалу.По-моему тут нужны ШАБЛОНЫ.
>>1178477Добавил libcd.lib в "Игнорировать все стандартные библиотеки" а в "Игнорировать все стандартные библиотеки" выставил нет (с да ошибок больше).Получаю вот это:1>------ Сборка начата: проект: 1, Конфигурация: Debug Win32 ------1>fltkd.lib(Fl_Image.obj) : error LNK2005: "public: __thiscall Fl_Image::Fl_Image(int,int,int)" (??0Fl_Image@@QAE@HHH@Z) уже определен в Graph.obj1>fltkd.lib(Fl_Input.obj) : error LNK2005: "public: __thiscall Fl_Output::Fl_Output(int,int,int,int,char const *)" (??0Fl_Output@@QAE@HHHHPBD@Z) уже определен в GUI.obj1>Graph.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall Fl_Image::color_average(enum Fl_Color,float)" (?color_average@Fl_Image@@UAEXW4Fl_Color@@M@Z)"1>Graph.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl fl_color(enum Fl_Color)" (?fl_color@@YAXW4Fl_Color@@@Z) в функции "public: void __thiscall Graph_lib::Shape::draw(void)const " (?draw@Shape@Graph_lib@@QBEXXZ)1>Graph.obj : error LNK2001: неразрешенный внешний символ ""enum Fl_Color fl_color_" (?fl_color_@@3W4Fl_Color@@A)"1>Graph.obj : error LNK2001: неразрешенный внешний символ ""int fl_font_" (?fl_font_@@3HA)"1>Graph.obj : error LNK2001: неразрешенный внешний символ ""int fl_size_" (?fl_size_@@3HA)"1>GUI.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall Fl_Input::draw(void)" (?draw@Fl_Input@@UAEXXZ)"1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Fl_Widget::show(void)" (?show@Fl_Widget@@QAEXXZ) в функции "public: virtual void __thiscall Graph_lib::Widget::show(void)" (?show@Widget@Graph_lib@@UAEXXZ)1>Simple_window.obj : error LNK2001: неразрешенный внешний символ ""public: void __thiscall Fl_Widget::show(void)" (?show@Fl_Widget@@QAEXXZ)"1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Fl_Widget::hide(void)" (?hide@Fl_Widget@@QAEXXZ) в функции "public: virtual void __thiscall Graph_lib::Widget::hide(void)" (?hide@Widget@Graph_lib@@UAEXXZ)1>Simple_window.obj : error LNK2001: неразрешенный внешний символ ""public: void __thiscall Fl_Widget::hide(void)" (?hide@Fl_Widget@@QAEXXZ)"1>E:\Projects\OWN\C++\Программирование. Принципы и практика с использованием C++\12\Задание\1\Debug\1.exe : fatal error LNK1120: неразрешенных внешних элементов: 81>Сборка проекта "1.vcxproj" завершена с ошибкой.========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
>>1177961В чем проблема? У тебя есть токен это один элемент твоей грамматики. Хуячишь виды токенов в енум, при парсинге распознаешь тип. Твои символы это то, что ты увидишь в отладчике если напишешь следующий енум.enum TokenKind {NUMBER='8', MUL='.', DIV='/'}Это ведь страуструповский калькулятор, не так ли?
>>1178243Выше уже всё объяснили.По стандарту C++ должна быть константой, чтобы размер был известен на стадии компиляции.Однако, такая фишка variable length array допустима начиная с довольно древнего стандарта си, а в C++ её поддерживают некоторые компиляторы например g++.
>>1178653Забавно, но так или иначе я получается был прав, но не полностью.
>>1178653>такая фишка variable length arrayНу и говнина.Просирают плюсы с каждым годом.
Посоветуйте что почитать по авторизации и аутентификации на крестах на примере какой-нибудь библиотеки. Жедательно какую-нибудь книжку по-подробнее, а не API мануал.
Здравия. Собрал библиотеку FLTK. Пытаюсь её протестировать. Указал доп. библиотеки: fltkd.lib wsock32.lib comctl32.lib fltkjpegd.lib fltkimagesd.lib. И указал игнорировать libcd.lib. Тестю вот этим кодом:#include <FL/Fl.H>#include <FL/Fl_Box.H>#include <FL/Fl_Window.H>int main(){ Fl_Window window(200, 200, "Window title"); Fl_Box box(0, 0, 200, 200, "HELLO WORLD!"); window.show(); return Fl::run();}Линковщик выдает вот это:1>------ Сборка начата: проект: FLTK_TEST, Конфигурация: Debug Win32 ------1>fltkd.lib(Fl_Box.obj) : error LNK2005: "public: __thiscall Fl_Box::Fl_Box(int,int,int,int,char const *)" (??0Fl_Box@@QAE@HHHHPBD@Z) уже определен в main.obj1>C:\Users\nail1\source\repos\FLTK_TEST\Debug\FLTK_TEST.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более1>Сборка проекта "FLTK_TEST.vcxproj" завершена с ошибкой.========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
>>1173348>>1178653http://cpp.sh/4fkeaСтранно как-то рабоает. Если слева внизу в опциях выбрать C++11, то выдает 20 байтов, а на C++14 выдает 1 байт. Что за хуйня? А на моем майкрософтском C++17 вообще ошибку выдает. Без const не идет.
Читаю Липмана пока, всё норм, но мне бы норм мануал как программа по фалам должна быть раскидана, то ли я ещё не дочитал до той части где это рассматривается толи вовсе нет этого в книге.Я прост не догоняю как всеми этими хедерсами крутить. С какого файла начинается сборка и так далее. Какая часть компилятора этим занимается?Можно в двух словах как эта хуета работает.
>>1178792Я всё в хэдэры кидаю и cpp-файлы почти не использую. Правда у куча шаблонов, а там по-другому никак.
Поясните, как найти интерес прочитать хоть одну книгу по c++
>>1178797 если у тебя такие вопросы то иди на хуй. Программирование не для тебя.
>>1178797пили проекты
>>1178792Ща поясню ебать.Короче компилируются исключительно .cpp файлы, хедеры же тупо подставляются вместо #include лол. То есть на первом этапе компиляции все хедеры запихиваются рекурсивно в .cpp, а потом уже .cpp переводятся в бинарный код. потом ещё линковка, но да хуй с нейИз этого следует, что хедеры должны быть максимально простыми, просто описание и ничего больше. Нежелательно использовать в хедерах другие хедеры, кроме того, что это всё будет рекурсивно потом подставляться, из-за такой херни часто ошибки вылетают, а также это увеличивает зависимости. Ща поясню про зависимости хотя я уверен только про cmake, но и в других сборщиках аналогично, я полагаю. Суть в чем, если ты изменяешь некоторый файл foo.cpp, то при компиляции будет пересобираться только он, то есть foo.cpp.o. Если же ты вносишь изменения в foo.h, то пересобираться будут все .cpp файлы, которые его включают. А теперь представь, что foo.h включают ещё десяток других хедеров, тогда пересобираться будут все .cpp файлы, которые включают хедеры, которые ссылаются на foo.h. В итоге, если постоянно включать хедеры в хедеры у тебя весь проект будет полностью пересобираться при малейших изменениях в одном из .h файлов.Мне как раз на работе дали такой проект, я заебался его компилировать и решил убрать #include из .h файлов. И теперь всё збсь. Я вообще разделяю любые классы на два файла, даже довольно небольшие шаблонные классы разделить нельзя! Теперь про то, когда нельзя убрать хедер из хедера. Не стоит убирать #include<vector> и прочие файлы из стандартной библиотеки, они не помешают. Нельзя убрать #include на родительский класс. Нельзя убрать инклуд на класс, если одно из полей является экземпляром этого класса. Последние два ограничения следствия того, что размер экземпляра класса должен полностью определяться хедером.#include "foo.h" // необходимclass SomeClass {Foo m_foo;}Однако это не распространяется на указатели и ссылки, в этом случае достаточно декларации классаclass Foo; // хедер не нужонclass SomeClass {Foo* m_foo;}Я обычно использую умные указатели и поэтому примерно так всё выглядит#include <memory> // для std::shared_ptrclass Foo;class SomeClass {using Foo_ptr = std::shared_ptr<Foo>; // когда западло каждый раз писатьFoo_ptr m_foo;}В последних двух случаях foo.h придется включать в some_class.cpp. Алсо если класс очень большой много разного функционала, то можно оставить один хедер, а .cpp файл разбить на несколько, в которых будут определения различных функций класса.
>>11787Хедер - определениеCpp файл - реализация.Вот ты зачем функции используешь? Для разбиения программы на логические единицы так? А в файлах можно объединять функции. А как собиратемя это все. Сначала все хедер фалы копируются в файл. Это делается с помощью #include. Это делает препроцессор - часть компилятора. Вообще все что начинается с # делает препроцессор. В хедерах определения так? после компиляции программа ,называемая редактором связей, ищет определения объявленных функций. И связывает объявления с определением.
>>1178653>Однако, такая фишка variable length array допустима начиная с довольно древнего стандарта сиА с менее древнего (C11) допустимо её не поддерживать. Бгг.
>>1178827Кстати, вот я задавал вопрос по этому поводу выше (или в прошлом треде, не помню).Почему нельзя сделать один хэдэр с неймспейсом, в котором все объявления, а там уже для каждого класса свой срр файл?Потому что в каждый срр с инклюдом будет опять поставляться этот файл с неймспейсом? Или из-за большой загруженности одного хэдэра?
Памагите послезавтра собес на Джуна.Может у кого-нибудь есть ссылка на сборник каких нибудь вопросов.Первые пару страниц Гугла я уже пролистал
>>1178970> завтра собес> спрашивает шпорыТы не пройдешь.
>>1178966>Почему нельзяМожно. Как я написал, можно даже создать хедер с объявлением одного класса, а реализовать этот класс в нескольких .cpp файлах.>из-за большой загруженности одного хэдэра?По большей части это. Пусть есть классы Foo1 и Foo2.Если они никак не связаны, то смысла так делать нет. Одному .cpp может понадобится только foo1.h, какому-нибудь другому только foo2.h.Но если Foo1 и Foo2 жить друг без друга не могут, то можно и в одном хедере объявить.Есть такой прием рефакторинга, когда функцию с большим числом параметров заменяют на аналогичную, но которая в качестве аргумента принимает структуру. В таком случае структура не имеет смысла в отрыве от этой функции и класса, логично структуру объявить в том же файле, что и класс.
>>1178970тебя попросят перевернуть список на бумажке , ты ничего не сможешь и ты уйдешь от них еле сдерживая слезы
>>1179004>хедер с объявлением одного класса, а реализовать этот класс послушай: хватит нести чушьразберись что такое объявление и определение класса, и что такое определение методов классаи вообще определение класса и структуры помещеается в хедеры, а стандарт разрешает множественные определения классов и структур..объявление же класса используется для других целей, в качестве упреждающего объявления чаще всего..я обычно молчу, но, блядь, последние посты в треде - много неверного написано
А вообще все эти хедеры-хуедеры - это устаревший пиздец, который слава богу уйдёт (по крайней мере в если писать проект самому) с принятием модулей в C++20. Можно будет всё хуячить в сpp файлы, а заголовки конпелятор будет создавать сам.
>>1179038сверху еще стоит разобраться с inline методов-членов класса, и что происходит если метод-член определяется внутри определения класса
>>1179038Бля, ну извини.
>>1179038А есть такие библиотеки, которые все пихают в один хедер не используя cpp файлов.
>>1179066Есть. Большая часть буста, например.
>>1179066Это самые лучшие библиотеки.
>>1179041Вроде уже в VS 2017 можно экспериментировать с модулями.
>>1179101Ппц, аж захотелось на винду пересесть. И опять студию поставить.Правда тогда у меня будет соблазн послать нахуй плюсы и писать на божественном шарпе.
>>1179106В шланге тоже есть (возможно и в гцц), не боись.
>>1179049ну это был намек на то что стоит просто чутка разобраться в этом вопросе и не более
>>1178792> С какого файла начинается сборкаКакой подашь на вход конпелятору, с того и начинается.
>>1178680> Просирают плюсы с каждым годомС каким годом? Эта дристня с незапамятных времен есть.
>>1179106А сейчас на чем ты сидишь и на каком языке?
>>1178810Согласен. Как исправиться?>>1178811Хочу игру запилить, а без основ нихуя не выходит, а основы лень прочитать
Не могу точно понять, что это выражение делает, только одна строка.(*bobo->progressProc)(varA, varB);Это как бы указатель на функцию? А нельзя было просто сделать так?bobo->progressProc(varA, varB);
>Хочу игру запилить, а без основ нихуя не выходит, а основы лень прочитать>основы лень прочитатьКак бэ тебе объяснить. ЯП это как научится писать, буквы там всякие, запятые, потом слова из них составлять, предложения. А сам софт это уже другой уровень, ты не сможешь написать поэму не зная букв.В рисовании тоже кстати так. Не задрочив кубы сиську не нарисуешь.Алсо, это тебе сейчас так кажется что основы это хуйня и ты как бэ их уже в принципе знаешь, но с крестами так не прокатит. Есть множество нюансов, все они вытекают из общей логики языка. Читай Липмана из списка литературы. У него хороший подход, с прочтением появляется понимание общей структуры замысла крестов, но книга бедна на примеры и всю дорогу мы делаем какую то неинтересную бухгалтерскую хуету, для библиотеки.Кресты нужны для байтоёбства, для жонглирования данными в памяти для задач реального времени для реальной жизни.
>>1179161>(bobo->progressProc)(varA, varB);хм, если тут таким образом вызывается метод, может тогда дело в том что bobo - это указатель на указатель.может так переписать*bobo.progressProc(VarA, VarB);
>>1179354макаба сожрала звезду в последней строке, их там две
что возвращает эта функция [CODE]inline class IMemStreamMgr GetMemStreamMgr( ) { return (IMemStreamMgr)GetCOREInterface( MEMSTREAMMGR_INTERFACE );}[/CODE]как функция может возвращать класс? не объект класса, а класс. я не понял
>>1179382Что-то мне подсказывает, что либо это не C++, либо где-то ранее стоит что-то уровня#define class
HELP! Собрал FLTK, но простейший код не компилируется:#include <FL/Fl.H>#include <FL/Fl_Window.H>#include <FL/Fl_Box.H>int main(){ Fl_Window window(200, 200, "Window title"); Fl_Box box(0, 0, 200, 200, "HELLO WORLD"); window.show(); return Fl::run();}Выдавая вот это:1>------ Build started: Project: FLTK_TEST, Configuration: Debug Win32 ------1>fltkd.lib(Fl_Box.obj) : error LNK2005: "public: __thiscall Fl_Box::Fl_Box(int,int,int,int,char const *)" (??0Fl_Box@@QAE@HHHHPBD@Z) already defined in main.obj1>C:\Users\nail1\source\repos\FLTK_TEST\Debug\FLTK_TEST.exe : fatal error LNK1169: one or more multiply defined symbols found1>Done building project "FLTK_TEST.vcxproj" -- FAILED.========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
>>1179388>не компилируетсяfalse
>>1179397А мне то что делать? Создаю пустой проект, прописываю библиотеки. Выдает вот это. Собирал на VS2017 в релизе.
>>1179400Собирал библиотеку*
>>1179397>прописываю библиотекис этого момента подробнее
>>1179402fltkd.libwsock32.libcomctl32.libfltkjpegd.libfltkimagesd.libВ игнор:libcd.lib
>>1179404если конфиг дебажный, то>fltkd.libесли релиз, то>fltk.libостальное хелловорлду нинужнону и таргет как Win32 GUI Application определи
>>1179405>ну и таргет как Win32 GUI Application определиА как это сделать?
>>1179405>остальное хелловорлду нинужноВключаемые библиотеки взял с учебника
>>1179408ээ, яхз сейчас чо там у VS2017 за свитчи, но вместо CONSOLE выход должен быть WINDOWS, если у тебя ошибка WinMain16@ вродену и сам подумой, зойчем пустой гуёвине сокеты?>wsock32.lib
>>1179411Создал пустой проект Win32 всё равно выдает вот это:1>------ Сборка начата: проект: Project3, Конфигурация: Debug Win32 ------1>fltkd.lib(Fl_Box.obj) : error LNK2005: "public: __thiscall Fl_Box::Fl_Box(int,int,int,int,char const *)" (??0Fl_Box@@QAE@HHHHPBD@Z) уже определен в main.obj1>C:\Users\nail1\source\repos\Project3\Debug\Project3.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более1>Сборка проекта "Project3.vcxproj" завершена с ошибкой.========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
>>1179406Погугли, ёпта. У тебя в дебрях свойств проекта переключается эта херня на subsystem:windows.
>>1179418похоже, что к проекту подключена не только fltkd.libвыпиливай конфликтующие либы
>>1179419Гуглил. Уже 3 день с этим сижу.
>>1179420С випилом также.
>>1179421Тогда ебать ты даун. Попробуй отдохнуть и на денек забить на это.
>>1179423Забивал уже. Вчера ничерта не делал.
>>1179422значит запрети использование стандартных библиотек
>>1179419Нашел этот переключатель пробовал и console и windows. Ничего не меняется
>>1179431Запретил библиотеку libcd.lib
>>1179433надеюсь, ты каждый раз пересобираешь начисто, а не оставляешь старые *.obj
>>1179439Попробовал пересобирать. Ничего не изменилось.
>>1179442сначала я думал ты тралишь, но увидев вот это > https://bumpyroadtocode.com/2017/08/29/how-to-install-and-use-fltk-1-3-4-in-visual-studio-2017-complete-guide-2-0-no-cross-contamination/ немного изменил свою точку зрениялично я тупо сделал apt install libfltk-dev, создал пустой проект, скопипастил твой код, добавил ключ -lfltk и все собралось с первого разапростыню выше по использованию студии не читал, хотя там вроде и не троллинг
>>1179448>лично я тупо сделал apt install libfltk-devГде? В консоли?>добавил ключ -lfltkИ это где?
>>1179453>aptда забей, это не виндовс>-lfltkа это в C::B флаг линковщика
>>1179386не, нету дефайнаэто с++ и оно даже компилируется возможно это как-то влияет на перегрузку функции
>>1179382Функция возвращает указатель на IMemStreamMgr. А IMemStreamMgr — это class.Ньюфаги не знают, что такое elaborated type specifier? Пора вернуться в закреплённый тред!
>>1179386>Что-то мне подсказывает, что либо это не C++, либо где-то ранее стоит что-то уровняЧто-то мне подсказывает, что ты рано вылез из ньюфаг-треда.
>>1179558> elaborated type specifierНикогда этой хуйнёй не пользовался. Очередная "фича" C++ для большего запутывания кода.
>>1179568>Никогда этой хуйнёй не пользовался.Как и хуйнёй под названием "мозги".
>>1179571А зачем он нужен кроме как краткой записи предварительного объявления? Все эти объявления я делаю в начале файла сразу после инклудов, а с модулями и они станут не нужны. Все остальные юзкейсы при совпадение имён переменных и классов просто курам на смех.
Что такое Clang? Это какой-то компайлер для виртуальной машины?
>>1179580>А зачем он нужен кроме как краткой записи предварительного объявления?Может для мифической совместимости с C, где надо писать struct перед тэгом структуры?
>>1179388Ладно, помогу тебе, бедняга. 1) Создаешь на любом диске (далее у меня будет диск С) папку с любым названием (FLTK например). Далее в нее кидаешь папки FL и lib из папки собранной библиотеки. В папке FL должно быть много всяких .h файлов (у меня 144), а в папке lib 7 .lib файлов.2) В студии создаешь пустой проект. Создаешь .cpp файл и заходишь в настройки проекта (Alt+F7). B далее смотри пик 2-4.
Да ёб твою мать! Что за хуйня то?Скачал исходники FTLK с оффсайта, собираю под Шин10 через msys, а оно блядь каждый раз выдаёт куче предупреждений и посылает на хуй на этапе с линковкой. Делол так:./configmakeПри чём блядь, версия 1,3,4-1 и -2 просто на этапе компиляции ошибку находила и пиздос. версия 1,3,3 доползла до линковки и пиздец.ЧТО ЗА ХУЙНЯ?! Или это такое мягкое приглашение в мир свободного ПО?
>>1179857>под Шин10 через msysА мог бы включить WSL и поставить там через apt-get.
>>1169708 (OP)Ребята нужна помощь, каким образом выполнить задание снизу?Вот мой код для ввода и вывода булева вектора:https://pastebin.com/HAbky92W
Господа, я дебил. Есть вектор shared_ptr и я пытаюсь найти минимальное значение. Сделал так hastebin.com/tikayoriku.cpp, но по итератору я сразу получаю сам класс, на который указывает shared_ptr, мне же нужен сам ptr. ЧЯДНТ??
>>1179922Поставь звёздочку перед std::min_element.https://ideone.com/hqL2fk
>>1179918Не используя <vector>, а только лог.операции + сдвиги.
>>1179558всё мне ясно стало теперьспасибо
>>1178970А что вы делаеце на моей галере?! Вы хатице работац?
Анен, посоветуй чтонить про вин32апи?
>>1180247Windows via C/C++ (Jeffrey RIchter)
>>1180266хосспаде, как же спасибо тебе
>>1180247> 2k18> WinAPI
>>1180269Почему бы и нет? Может ему нужно. Windows-то до сих пор на Win32 API работает.>>1180247Я в начале нулевых вот по этой книге изучал, и судя по отзывам на амазоне, эта книга до сих пор актуальна https://www.amazon.com/Programming-Windows®-Fifth-Developer-Reference/dp/157231995X/А если хочешь по-быстрому стартануть, то советую тебе вот этот замечательный краткий туториалhttp://www.winprog.org/tutorial/start.html
Я увидел в коде вот такой циклfor (int i = 32; i--;)Это вообще хороший стиль, или у него есть какие-нибудь косяки?
>>1180357Бля, ну вообще забавно. Ни разу такой хуйни не видел.Не совсем очевидно, до скольки i опустится. Даже лень думать.
>>1180358>Не совсем очевидно, до скольки i опуститсяАхуеть.Что ты забыл в программировании?
>>1180358Проследил через дебаггер, когда i доходит до нуля, цикл заканчивается. Ведь второй параметр в for цикле, это как условие if. Если i не false или не ноль, то цикл продолжается.
>>1180359Ну бля, я прост бухой в говнину.Да и вообще хуй знает, когда там условие внутри for проверится, до или после декремента. В любом случае это говнокод, если сразу непонятно, но интересно.
>>1180357Хороший стиль для "беззнаковых" при итерации в обратном порядке.for (size_t i = N; i --> 0; )`--> 0` называется «оператор "стремится к нулю"»
>>1180361>Да и вообще хуй знает, когда там условие внутри for проверится, до или после декремента.Вернись в ньюфаг-тред.
>>1180364> `--> 0` называется «оператор "стремится к нулю"»Это называется пиздежь. На самом деле компайлер это читает как i-- > 0, в итоге получается то же самое как и просто i--;
>>1180368>> `--> 0` называется «оператор "стремится к нулю"»>Это называется пиздежь.Прямо-таки разоблачение века.
>>1180365Соси жопу, это вообще ненужные знания нахуй, зачем мне в каком то говнокоде разбираться в срачах уровня "чему равно ++(i++)++", или как там.Ну бля я могу предположить, что for вычисляет выражения, а значит сначала сделает декремент. Но бля, тут второй вопрос возникает. Получается первое значение i в цикле будет 31?Короче идите нахуй, я спать.
>>1180372Даже js-макаки не позволят себе такой неграмотности, пиздец.
>>1180372При первой проверки выражения i имеет значение 32, так как это постфиксный декремент, а внутри цикла уже 31.
>>1180357Щас проверил, это даже в js работает.
Почему это не работает? Указатель temp указывает на какой-то мусор.string tanga("ivandurak");const char temp = tanga.substr(2, 3).c_str();А вот так работаетstring tanga("ivandurak");string atas(tanga.substr(2, 3));const char temp = atas.c_str();
>>1180405Блять ебучий двач звездочки возле char проглатил.
>>1180405>Почему это не работает?Потому что возвращаемая из substr строка уничтожается по окончании вычисления выражения.
>>1180408Хм это опять какой-то нюанс С++? Это из-за rvalue или? Другого более удобного варианта нет?
>>1169708 (OP)Что лучше: определять функции в хедере с телами как inline или разделять их на файл объявлений и файл определений?
>>1180544Разделять, потому что если изменишь объявление в хедере, то буут перекомпилироваться все файлы включающие данный хедер. Гугли паттерн pimpl/мост
>>1180269А что собственно с 1998 поменялось в сфере где используется выньопи?
>>1180640Никто больше не использует голое winapi, как это было 1998.
>>1180640>>1180653В 1998 никто не использовал голое винапи, уже с 92 го был мфц. А сейчас и мфц нужен считай только для легаси.
>>1180655Использовали, еще как.
>>1180653Кто "никто"? Люди которые писали системный софт на винапи, точно так же пишут его на винапи, максимум со своими обертками. Программач, ты заебал смотреть на всё с позиции формошлепства.
>>1180269А как нужно правильно делать?
>>1180488>Хм это опять какой-то нюанс С++?Для тебя сюрприз, что временные объекты уничтожаются по окончании вычисления выражения?> Это из-за rvalue или?Не знаю, что ты понимаешь под "из-за", но если тебе будет легче, тоtanga.substr(2, 3)это prvalue (которое превращается в xvalue для вызова метода)и tanga.substr(2, 3).c_str()тоже prvalue.
>>1180802Да, для меня сюрприз, потому что я только изучаю. Значит метод чейнинг в С++ не работает? Ты мне не ответил, есть ли удобный выход в такой ситуации или мне нужно создавать дополнительный стринг объект?
>>1180816>Значит метод чейнинг в С++ не работает?Почему, работает. Объекты вполне живы во время этих вызовов.Ты сохраняешь внутренности объектов, которые уничтожаются после вычисления выражения.> Ты мне не ответил, есть ли удобный выход в такой ситуации или мне нужно создавать дополнительный стринг объект? Да, надо вводить переменную.
Анон, есть ли способ заставить студию нормально обрабатывать комментарии типа://Xyi\XyiЕсли определения метода комментировать таким образом, то при наведении курсора на любое использование метода в коде комментарий не отображается.
>>1180488Насколько я понимаю ты делаешь указатель на ничто, т.к при выходе за область видимости временные переменные созданные внутри функции уничтожаются. Допустим попробуй обратиться к переменной из функции в main, не сможешь же, ибо для main этой переменной не существует, она существует только в рамках функции, в её области видимости, тебе нужно сделать отдельную локальную переменную в main, сохранить в неё то что ты получаешь из функции и работать уже с ней, иначе будешь получать мусор до бесконечности.Может я скажу что-то очевидное, но для того чтобы передать в функцию конкретную переменную, а не просто скопировать её значение в новые переменные, которые создаст функция, тебе нужно юзать ссылки или указатели.мимо нюфаня не бейте сильно если что-то не так сказал
Спросил в закрепе, но спрошу и тут.Анон, пишу параллельные DFS и BFS алгоритмы на крестах с OpenMP.Главный вопрос - КАК?В DFS я пришёл к такому варианту: до определенной глубинымоего ануса дерева я фигачу обычный BFS, как выхлоп получаю - кучу нод. Потом я подрубаю OMP и на каждую из этих нод запускается DFS. Получается, что я одновременно исследую несколько под-деревьев. Как только нахожу нужный мне результат, делаю cancel и живу счастливо.Но как быть с BFS?? Как с DFS не получится, ведь BFS смотрит ноды в ширину, и я не знаю как выглядит следующая глубина дерева, пока не просмотрю всю нынешнюю. Идея такова: для каждой ноды на нынешнем уровне я проверяю её потомков, если какой-то из них не является тем, что я ищу. Если среди них нет нужной мне ноды, добавляю в какой-нибудь общий вектор.
>>1180973Что ты меня учишь балбес. Я знаю что у функций есть свой scope. В моем примере выше весь код находится внутри main и используются там только мемберные функции класса string. И второй вариант работает без проблем.
>>1181103Когда ты пишешь auto temp = tanga.substr(2, 3).c_str(); правая часть (результат substr) уничтожается сразу после присваивания, поэтому в temp остаётся мусор. А вообще если тебе так часто нужно брать части строк, лучше напиши свои строки с COW и опциональным подсчётом ссылок.
>>1181104Можешь ты (или кто-нибудь другой) дать мне пример, где конкретно в C++ метод чейнинг будет работать? Не обязательно с стрингом. Просто меня удивило это в C++, так как в других языках можешь хоть цепочку длиной десять сделать и будет норм работать, главное чтобы следующая функция была мембером типа, который возвращает предыдущая функция. А в C++ еще надо соблюдать, удалится ли это объект, если его сразу не присвоить. Я думаю, мне нужно еще хорошо разобраться с этими всякими валуеми, rvalue, prvalue, xvalue.
>>1181125> где конкретно в C++ метод чейнинг будет работать?Тут проблема не в std::string, а в функции c_str. Она возвращает указатель на внутренности объекта, который затем уничтожается. Если бы ты работал с самим string, то всё было бы нормально.
Блядь, но ведь c_str() возвращает указатель. Что и где умирает, я нихуя не понял?Проблема, получается в объекте, который возвращает substr он-то и прекращает существовать, провоцируя созадние невалидного указателя?
>>1181142> Блядь, но ведь c_str() возвращает указатель.Проблема в том, что это raw-указатель. Вот если бы это был shared_ptr с подсчётом ссылок, то объект уничтожался после уничтожения всех указателей.
>>1181129>>1181151А можно этот указатель как-нибудь с помощью std::move спиздить?
>>1181165Nyet. Только скопировать каким-нибудь strcpy.
>>1181142То с чем ты ипёшься называется висячий указатель (ссылка в c++ тоже бывает висячей в отличии от тех языков с которыми ты ранее имел дело).https://en.wikipedia.org/wiki/Dangling_pointertanga.substr(2, 3) создаёт новый безымянный объект string, на который никто не ссылается извне - это временный объект (prvalue). У этого объекта ты берешь через c_str() указатель на внутренности (адрес одного из его полей в памяти) и записываешь адрес в переменную. При передаче управления в следующую строку кода временный объект умирает (ведь о нём никто не знает) и данные по адресу, который ты сохранил, становятся невалидными как часть умершего объекта.
>>1181221Тот, кому ты ответил, это не я писал, а какой-то дурачок за меня ответил. Но все равно спасибо за объяснение.
Это нормально вообще? Я готов поверить, что оно не хочет автоматом приводить а/b к даблу, пусть даже с имеет тип дабл. Но почему в 3 случае скобки сломали приведение, а в 4 случае опять все работает?
>>1181248Всё нормально.Пик 1Когда ты делишь int на int получаешь округленный int. Пик 2Если у тебя хотя бы одна переманая с плавающей точкой (float или double), то и результат будет с плавающей точкой.Пик 3Переменые у тебя в скобках, значит сперва решаются они, получаешь 1, и аж потом ты делаешь каст на double.Пик 4Опять сперва в скобках 5 / 3 = 1, затем кастуешь в double получаешь 1.0, теперь у тебя ситуация как на втором пике, и напоследок делишь на 3, получаешь 0.333
>>1181248когда ты инты делишь - по умолчанию результат всегда инт. ему пофигу куда ты его присваиваешь. по-этому не работает 1.2 работает потому что тут ты приводишь к даблу не результат а а! а дабл делить на не важно что - будет дабл.соответственно в 3 ты делаешь то же самое что в 1, только явно. приводишь результат деления инта на инт (который тоже инт) к даблу. потому и не работает. дробной части там уже нет.ну и 4 то же самое что 2. ты приводишь к даблу результат деления инта на инт, а потом этот дабл делишь не важно на что. и получаешь дабл.как-то так.
У меня баг с QGraphicsScene и QGraphicsItem.Я переопределил в сцене mouse*Event, поэтому все ивенты должны посылаться на объекты QGraphicsItem в сцене.Поначалу все работает, основной функционал, который реализую - "перемещение" объектов (простое изменение координат отрисовки).Но только я "перемещаю" объект достаточно далеко от первоначального положения - он прекращает принимать ивенты и только полное пересоздание инстанса сцены помогает.п.с. на сцене все зарисовано плиткой из картинок
>>1169708 (OP)ОП-пост не читал (читал, на самом деле, но давно). Решаю математические задачи на плюсах полгода, нужен gui со всякими крутилками, графиками, кнопками и полями ввода. Всё эти полгода сижу на билдере (RAD Studio). Но там какая-то дичь с графиками и поэтому я задумался о переходе в другую идэе. Знаю, что в VS требуется сишарп для граф. интерфейса, а в Qt бесплатная лицензия весьма порезана (на трекерах купить не смог, так как не нашёл). В общем сейчас немного не знаю что делать. Какой из этих трёх стульев будет лучшим вариантом под мои задачи? Так же будет приятно, если можно будет строить графики в объёме прямо в окне, средствами самой среды, без OpenGL. Хотя, если выбора нет, то я готов изучить что-нибудь новое. Но всё-таки хочется остаться на плюсах.
>>1181261>>1181252
>>1181284Покупай Qt / ебись с wx
>>1181287Что за wx?Я чисто ради интереса заглядывал сколькл стоит Qt. А там опять эта ебучая подписка. Я бы ещё подумал, если 30к за бессрочную лицензию, но я одиночка и не от фирмы, так что лицензия мне не светит.
>>1181284> а в Qt бесплатная лицензия весьма порезанаЕсли статическая линковка нинужна, то можешь спокойно использовать.
>>1181291Дык нужна. Это и подмутило воду. Не хочется каждый раз тоскать с экзешником тонны библиотек.
>>1181293> нужна.> хочетсяТак нужно или хочется? Ты уж определись.
>>1181294Это было бы намного удобнее. Удобнее настолько, что я готов не рассматривать Qt вообще. Хотя он мне очень понравился.
>>1181302Палю годноту: запаковываешь все библиотеки и само приложение в специальное приложение-запускальщик, которое всю эту фигню распаковывает во временную папку и оттуда запускает.
Какие есть 2d движки написанные на c++?
Qt vs STLhttp://blog.qt.io/blog/2010/06/17/how-qt-can-turn-you-into-a-guitar-maestro/
>>1181328Ты правда считаешь, что third party компонентами (хоть из QT хоть откуда) надо засрать весь проект усилив связанность его модулей, тянущих за собой избыточные либы и хедеры?
>>1181325Напиши свой.
>>1181290>Что за wx?wxWidgets - легковесный гуй на плюсах.
>>1181368Нет нормальной поддержки исключений, поддержка STL еще в процессе, да и вообще проект как-то стагнирует
>>1181367Как
>>1181448Напиши игру.Движок сам собой получится.
>>1181449Зелёный, уйди
>>1181448Смотря какую игру ты собрался делать. Если еба мултиплеерную РПГ, то в одиночку ты соснешь. А вот движок для арканоида или тетриса можно осилить и одному.
Перекатывать не будете?
>>1179029> тебя попросят перевернуть список на бумажке , ты ничего не сможешьЯ бы тоже не смог. Кто ж знал что у жабадебилов строки иммутабельные.
>>1181820Байтоеб плез.
>>1181836Блять, в том то и дело что это НЕ нормально.Нормально просто пройтись циклом до половины строки и поменять значения, все блять.
>>1181851Проблемы начнутся в кодировках уровня utf-8, где символы могут иметь разный размер в байтах.
>>1181853Этот метод для любой кодировки, хоть UTF32, работает неправильно - не учитывает что один символ может быть представлен несколькими знаками
>>1179029А если попросят сбалансировать AVL-дерево на бумажке?
Перекатhttps://2ch.hk/pr/res/1181867.htmlhttps://2ch.hk/pr/res/1181867.htmlhttps://2ch.hk/pr/res/1181867.htmlhttps://2ch.hk/pr/res/1181867.html
>>1181853Про кодировку и слова не было. В противном случае на хую вращаем std::u32string.
>>1181151>Проблема в том, что это raw-указатель.Я только с ними и работал.
>>1181237>аноним>за меня ответил>это не я писалИди нахуй, долбоеб.