М.Двач / Программирование

Двач.hk прислал битые данные.
Вы видите копию треда, сохраненную 26 июня 2018 года.
Можете попробовать обновить страницу, чтобы увидеть актуальную версию.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

C++ №69 7 апр, 18:14 1169708 В конец треда | Веб

3 Кб, 400x3009 Кб, 495x289

Вместо шапки — https://github.com/sosachbot/cppthreadhat/wiki
Ответы на все вопросы:
- http://en.cppreference.com/w/
- http://www.cplusplus.com/reference/
Прошлый: >>1157163 (OP) (OP)

Ответы748027832678425799188054481284

7 апр, 18:14 2 1169710

Есть классы Base и Derived, причем:
class Base;
#include "Base.hpp"
class Derived : public Base { ... }
При попытке собрать в студии 15 ошибка "Base class undefined"

Ответы6971169932

7 апр, 18:15 3 1169711

>>1169710
собсна что я делаю не так?

Ответы69712

7 апр, 18:17 4 1169712

>>1169711
>class Base;
Это в Derived.hpp?

Ответы69713

7 апр, 18:17 5 1169713

>>1169712
Да, это всё содержимое Derived.hpp.

Ответы69714

7 апр, 18:19 6 1169714

>>1169713
Попробуй убрать class base; ты делаешь его форвард декларейшн и потом еще вставляешь весь код с Base.hpp. Может быть транслятор охуевает из за этого

Ответы69719

7 апр, 18:25 7 1169719

>>1169714
Ничего не изменилось. Ах да, все файлы содержат include guard в виде #ifndef BASE_HPP #define BASE_HPP <...> #endif, поэтому я и навставлял forward declaration, а то мало ли, вдруг соответствующий hpp в итоге подключается двумя экранами ниже / выше.

Ответы69723

7 апр, 18:31 8 1169723

>>1169719
Скинь код в ideone, только комментами обведи где base.hpp и derived.hpp

Ответы69728

ньюфаг 7 апр, 18:31 9 1169724

програмыч, помогите с кодом, хотел создать приложение которое возводит число в степень, но оно не работает со степенями > 2. помогите!!!
https://pastebin.com/fKLGWttg

Ответы6972769729

7 апр, 18:34 10 1169727

>>1169724
такое чувство, что ты вообще нихуя не выкупаешь, что ты делаешь.

7 апр, 18:34 11 1169728

>>1169723
Вот весь проект:
http://rgho.st/8pCj9w7Zg
Derived.hpp - это ...PlayerAi.hpp, а Base.hpp - ...Player.hpp.
А вот конкретно портянка которая выдает ошибку:
https://pastebin.com/ycjS1SEq

Ответы6973169932

7 апр, 18:35 12 1169729

>>1169724
Хуя шизофазия. Да и не только в коде.

7 апр, 18:36 13 1169731

>>1169728
Ты лучше в ideone/pastebin засунь целиком оба файла. Мне лень скачивать архив, вытаскивать солюшн (или не дай боже c-make файлы), разгонять вижак и смотреть на файлы

Ответы69733

7 апр, 18:40 14 1169733

>>1169731
Хорошо. Ну Derived у тебя уже есть, а вот Base:
https://pastebin.com/XgbZdUHR

Ответы69760

7 апр, 19:30 15 1169760

>>1169733
Выглядит всё нормально. Ты уверен, что правильно ошибку компилятора понял? И еще, я бы попробовал избавиться от лишних forward declaration'ов там, где они не нужны или наоборот, от лишних инклюдов. Ты дважды объявляешь class c; а потом такой #include "c.hpp", в котором содержится объявление класса. Я не знаю, как поведет себя vc++ в такой ситуации, но допускаю, что может не понять тебя.

Ответы697856979469847

221 Кб, 1920x1080
7 апр, 19:53 16 1169785

>>1169760
Ошибка такова. Вот инклюдов и объявлений лишних к сожалению нет, основные классы друг друга агрегируют, оставшийся класс наследуется от основного.

7 апр, 20:09 17 1169794

>>1169760
И вообще хуйня какая-то с этими include'ами, в main я подключаю Game.hpp, в Game.hpp - Player.hpp, но перед Player.hpp всё равно приходится делать forward declararion класса Player, поскольку иначе ошибки. Это же явно первое включение Player.hpp, так откуда ошибки, если вот определение класса Player? Чушь.

Ответы69796

7 апр, 20:13 18 1169796

>>1169794
Какой смысл по твоему в forward declaration'е, если ты потом тут же инклюдишь хэдер → вставляешь объявление класса? Крайне наврядли, но может у тебя вижак шалит? Попробуй снеси все ненужные FD, или убери лишние инклюды там, где не надо. например в Game.hpp не включай Player.hpp, а используй FD и если ты не знал, то сообщаю, что при обработке твоего Game.hpp компилятор не знает размер объекта класса Player, поэтому ты можешь использовать только указатели класса, который ты объявил с помощью FD

Ответы69798

7 апр, 20:14 19 1169798

>>1169796
Да, когда уберешь всё лишнее - закрой вижак, в папке солюшна найди скрытую папку .vs и пидорни её. Потом открой слона заново.

Ответы69802

7 апр, 20:23 20 1169802

>>1169798
Убрал все include и forward declaration.
Сделал так:
main.cpp : include Game.h
Game.h :
class Game;
include Player.h, View.h, PlayerAi.h
Ошибка в Player.h - "unexpected tokens precending ;" на Game@ член класса Player в Player.h Я же объявил class Game, чяднт-то.

Ответы6980369804

7 апр, 20:23 21 1169803

>>1169802
Закрыл решение, пидорнул папку vs, открыл решение и сделал все перечисленное.

7 апр, 20:27 22 1169804

>>1169802
>Ошибка в Player.h - "unexpected tokens precending ;"
это вообще похоже на синтаксическую ошибку. И еще, я думаю, что компилятор при трансляции не учитывает контекст, в котором включен каждый хэдер, поэтому в Player.h твой FD class Game просто не виден. Сделай FD в Player.h тогда уж, если так надо.

Ответы6980769824

310 Кб, 1024x768
7 апр, 20:33 23 1169807

>>1169804
Снова всё убрал и начал по ошибкам расставлять FD / include'ы по необходимости. Собралось-таки. Отличная дилда.

7 апр, 20:50 24 1169824

>>1169804
Ну вот опять, добавил еще один наследующийся от Player класс, точно такой же как PlayerAi, ну там кроме пары мелочей, собираю - "unresolved external symbol" на вызов конструктора в main. Перезапускаю решение - пропали все файлы свежедобавленного класса, хотя в папке с решением остались. Добавил, пересобрал - всё равно. Как будто файлы класса где-то проебываются по дороге.

7 апр, 21:10 25 1169834

https://support.microsoft.com/ru-ru/help/4089821/files-disappear-from-project-after-saving-in-visual-studio-2015
>10 Windows версии 1709 включает исправление некоторых событий файловой системы. Visual Studio 2015 ошибочно интерпретирует эти события, как удаление файла.

7 апр, 21:31 26 1169847

>>1169760
Я слегка другой анон.
Вот во избежание ебли с хэдерами, нельзя ли сделать вместо нескольких один с неймспейсом, где объявлены все классы, а дальше уже их реализации в отдельных срр?

Ответы69856

7 апр, 21:44 27 1169856

>>1169847
А я тот что просил помощи. В шарпе тема с неймспейсами охуенно заходит, там я вообще никогда с этой проблемой не сталкивался. А еще каким бы мегарешением ни был твой хэдер, в каждом другом хэдере тебе все равно придется делать fd, видимо потому что
>И еще, я думаю, что компилятор при трансляции не учитывает контекст, в котором включен каждый хэдер

8 апр, 00:28 28 1169909

>>116985
Слегка тебя не понял.
Если у меня есть один файл с точкой входа, есть хэдэр с неймспейсом и цпп для каждого класса в этом пространстве имен, то я просто в цпп с реализацией добавляю инклюд файла с неймспейсом.
А что ещё нужно-то?

Ответы69915

8 апр, 00:53 29 1169915

>>1169909
Тогда получается что у тебя интерфейс нескольких классов описан в одном хедере. Некруто.

8 апр, 02:12 30 1169932

>>1169710
>>1169728
у тебя ошибка во время компиляции Connect4Player.cpp
если проследить цепочку включений хедеров и стражей включения, то по итогу получается что определение класса Connect4PlayerAi не видит определение своего базового класса Connect4Player, на что тебе компилятор и указывает

Ответы69936

8 апр, 02:27 31 1169936

>>1169932
Спасибо, уже решил вопрос. Теперь во второй раз переустанавливаю студию - сначала баг с исчезновением файлов, потом "the visual c++ project system package did not load correctly" после установки обновления, исправляющего проблему с файлами =\

8 апр, 11:45 32 1170027

Ну вот, не прошло и суток как все наконец работает.

8 апр, 16:17 33 1170159

https://ideone.com/CMnLqV
В code::blocks ошибка в switch()
исправьте, если не трудно
мимонуфаг

Ответы70166

8 апр, 16:48 34 1170166

>>1170159
Попробуй каждому кейсу в свитче сделать скоуп, то есть фигурные скобки, брейк тоже должен быть внутри скобок.

Ответы70175

8 апр, 17:05 35 1170175

>>1170166
не работает

Ответы70189

8 апр, 17:27 36 1170189

>>1170175
ещё у тебя при каждом вызове функции твоего калькулятора отсутствует точка с запятой, каждый кейс у тебя должен быть типо:
case 1: {
multiply1();
break;
}

Ответы70190

8 апр, 17:30 37 1170190

>>1170189
и свитч тоже должен иметь скобки, то есть:
свитч(выражение) {
кейс
кейс
и т.д.
}//это типо закрылся свитч

8 апр, 18:40 38 1170246

Есть задание: реализовать класс дата который умеет в прибавление/отнимание дат. в нём мы организуем переменные день, месяц, год и должны переопределить операторы +/- чтоб сообственно плюсовать даты и получать на выходе конечную дату

И дальше в задании хуячятся ассерты:
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 данным как атрибут при определении оператора, как заставить программу правильно понимать что я хочу плюсовать день или месяц?

Анон помоги!

Ответы7025270262

8 апр, 18:52 39 1170252

>>1170246
Здесь видимо классы Day, Month и Year агрегированы в класс дата, а определяется просто нужной перегрузкой соотв. оператора.
CDate CDate :: operator +(const Month& month)//прибавление месяца
И аналогично с другими классами.

Ответы7025470271

8 апр, 18:53 40 1170254

>>1170252
А day и month это скорее всего не функции, а вызов конструктора, просто без именования объекта.

Ответы70271

8 апр, 19:02 41 1170262

>>1170246
https://ideone.com/iDNVWJ

Ответы702657027170393

8 апр, 19:07 42 1170265

>>1170262
это не пройдёт его ассёрт, там видно, что у него месяц завязан на значении дня, ты же просто прибавляешь день. И будет
CDate ( 2001, 2, 20 ) + Day ( 9 ) = 2001-2-29,а не 2001-03-01.

Ответы70271

8 апр, 19:25 43 1170271

>>1170252
>>1170254
>>1170262
>>1170265

спасибо, анон. допетрил

8 апр, 22:05 44 1170393

>>1170262
я бы так не советовал делать. для year, month, day, hour и т.д. надо отдельные классы делать. ато получится что-то типа
Cdate date = Day(3) + Hour(4); // ну и какая тут дата в итоге?

Ответы74283

9 апр, 10:19 45 1170619

Это больше в 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 -c

TL; DR
То есть, хочу слепить два объектника в один, а потом
уже его использовать для сборки экзешника. Проблемы: при сборке экзешника линкер ругается, что object_1.o ссылается на несуществующие функции (которые должны были быть в object_2.o). Помогите советом. Если кто-то недопонял, попробую внятнее объяснить, простите за сумбур.

Ответы7072171061

9 апр, 14:48 46 1170721

>>1170619
Зачем ты руками прописываешь правила сборки, в make есть встроенные.

> в зависимостях у $(EXE) не все объектники, а лишь те, от которых он напрямую зависит в коде?
Шо?

9 апр, 15:08 47 1170730

почему при подключении библиотеки <Windows.h> вылазит окно winuser.h и указывает на ошибку?

Ответы70866

9 апр, 19:57 48 1170866

>>1170730
wut? Скриншот может дашь?

9 апр, 23:39 49 1170990

Аноны, зачем мне знать сколько байт занимает тот или иной тип?
мимо вкатывальщик

Ответы71032

10 апр, 00:33 50 1171032

>>1170990
Если не байтоёбишь, то незачем. А так чтобы понимать почему на 64-битной машине:
int main()
{
int32_t a,b;
int@ ptr = &a;
ptr++;
*ptr = 2;
std::cout << b;
}
выводит не 2 а мусор. Ну и т.д.

Ответы710357108671825

10 апр, 00:36 51 1171035

>>1171032
Спасибо

160 Кб, 700x785
10 апр, 01:09 52 1171036

Антош, где почитать как пользоваться дебаггером полному нубу? Я плохо представляю что он вобще делает. Не конкретная ide а прост принципы блоховодства.
Использую codelight.

Ответы71060

10 апр, 06:43 53 1171060

>>1171036
Берешь и пользуешься. Возьми gdb.

10 апр, 07:07 54 1171061

>>1170619
https://stackoverflow.com/questions/6489627/how-to-use-multiple-source-files-to-create-a-single-object-file-with-gcc#6489760

Ответы71117

10 апр, 08:38 55 1171086

>>1171032
А при чем, в твоем примере, размер переменных? Там же соль в том, что память для не массивов выделяется не подряд а как попало. Или нет?

Ответы71102

10 апр, 09:43 56 1171102

>>1171086
ну пример не очень корректный. идея в
int main()
{
int32_t a[2];
int@ ptr = &a;
ptr++;
*ptr = 2;
std::cout << a[1];
}

даже так 2 не выведет.

в общем если есть указатели, то надо понимать какого они размера, что делает оператор + и ++ для указателей и т.д.

Ответы711077111671144

10 апр, 09:52 57 1171107

>>1171102
Скорее на какой тип указатель указывает, размер у всех указателей одинаковый.

Ответы71152

10 апр, 10:03 58 1171116

>>1171102
Конечно не выведет, оно даже не компилируется.

test2.cpp: В функции «int main()»:
test2.cpp:7:13: ошибка: ошибка преобразования «int32_t ()[2] {aka int ()[2]}» в «int» в инициализации
int ptr = &a;

Ответы7112571153

10 апр, 10:04 59 1171117

>>1171061
Оно! Спасибо.

Способы есть, но я так понял, что такое обычно не стоит делать (как и предполагал). Так что не буду извращаться.

Ответы74286

10 апр, 10:16 60 1171125

>>1171116

Чем компилишь? MSVC?

Ответы71126

10 апр, 10:18 61 1171126

>>1171125
g++

Ответы71136

26 Кб, 1239x192
10 апр, 10:31 62 1171136

>>1171126
Странно. Кстати, в результате таки вивыодит 2. А все потому что автор примера думал, что на х64 машине integer будет 64 бита. Видимо, он хотел показать, что размер указателя разный на разноразрядных ОС.

Ответы7114471200

10 апр, 10:58 63 1171144

>>1171136
Я компилил это - >>1171102
В коде очевидная ошибка. Но если ее исправить будет так же 2 для g++
int - по стандарту не менее 16 бит, и в зависимости от компилятора и целевой системы может быть хоть 1024, пример не оч. удачный, т.к. почти всегда int32_t - синоним int.

Ответы71147

10 апр, 11:04 64 1171147

>>1171144
Ну ты писал, что ошибка следующая:
>ошибка: ошибка преобразования «int32_t ()[2] {aka int ()[2]}» в «int» в инициализации
int ptr = &a;

Почему g++ интерпретировал int @ptr как
int ()[2] ?

Ответы711997121771826

10 апр, 11:12 65 1171152

>>1171107
серьезно? прям уверен-уверен?

Ответы7115871204

10 апр, 11:13 66 1171153

>>1171116
ну ты же понимаешь что это не
int ptr = &a;
а
int звездочка ptr = &a;
??

Ответы71199

10 апр, 11:22 67 1171158

>>1171152
Да, размер указателя в одном 32-битном приложении будет равен размеру указателя в другом 32-битном приложении, аналогично с 64-битными.

10 апр, 12:14 68 1171199

>>1171153
Ну хотелось ему тыкнуть в тебя в твою опечатку, бывает. Меня больше интересует, почему это охуевший g++ распознал int@ как int () [2] ?

>>1171147- хуй

Ответы71410

10 апр, 12:17 69 1171200

>>1171136
О, расскажите балбесу, что тут происходит.
Мы положили 2 в область памяти, но не имеем никаких гарантий что там не окажется что-то другое за время работы программы, так как мы пидарасы?

Ответы7120771209

10 апр, 12:21 70 1171204

>>1171152

Что не так?
Указатель - переменная, содержащая адрес. Количество байт, которое отводится на адрес, является разным в х32 и х64 системах. Соответственно, размер который занимает указатель в памяти (именно указатель, а не данные, на которые он должен ссылается), является постоянным в одной и той же ОС.

Ответы71415

10 апр, 12:27 71 1171207

>>1171200
Ложим двойку в область памяти, где какбы должна находиться переменная b. В нашем случае так и происходит - двойка попадает как раз туда где лежит b.

>не имеем никаких гарантий что там не окажется что-то другое за время работы программы, так как мы пидарасы

Ну подобные действия с нашей стороны - это undefined behaviour. Но я не уверен, может ли програма в короткосрочной или дальнесрочной перспективе перемещать данные, которые лежат на стеке (типа, вставить что нибудь вместо b, а саму b переместить куда-нибудь). Думаю, что такого быть не должно, но вдруг тут есть знатоки, знающие больше.

15 Кб, 292x391
10 апр, 12:32 72 1171209

>>1171200
Ну и, как я говорил, автор примера очевидно проебался, так как хотел продемонстрировать разницу в объемах памяти, которые занимает переменная-указатель на разных архитектурах.
А на деле пример пытается продемонстрировать, что int на разных архитектурах - разный, что очевидно, неверно.

Ответы71230

10 апр, 13:00 73 1171217

>>1171147
Разметка, там звездочки проебались.

10 апр, 14:06 74 1171230

>>1171209
Автор примера и вправду проебался, но показать он (я) хотел несколько другое. Переменные в стеке на 64-битной машине должны быть выровнены по размеру машинного слова, по крайней мере я в прошлом году проебался так с кодом, который оперировал переменным списком параметров (самописный printf со свистелками и перделками), суть в том что друг за другом шли int16 и in16, код собирался под 32бит, и эти int16 располагались с промежутком между ними, которого хватает на еще один int16.

Ответы71687

10 апр, 16:09 75 1171273

Ананасы, поясните по хардкору:
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)
{ ... }
можно? Результат ожидаемый?

Ответы7127471294

10 апр, 16:12 76 1171274

>>1171273
у тебя полю a присваивается то, что стоит в скобках, независимо от того, на каком месте находится, поэтому первое и второе это одно и тоже.
В третьем варианте у тебя с инициализируется значением _с и возможно ты что-то делаешь внутри фигурных скобок, но ты этого не написал.

Ответы7127671282

29 Кб, 653x526
10 апр, 16:16 77 1171276

>>1171274

10 апр, 16:27 78 1171282

>>1171274
Перепутал порядок аргументов с порядком вызова в списке инициализации, спасибо.

10 апр, 17:06 79 1171294

>>1171273
Все три варианта скомпилируются, даже если тело конструктора будет пустым в третьем варианте. Другое дело, что так делать не стоит. По второму варианту, почему так делать не надо, объяснено в Core Guidelines: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c47-define-and-initialize-member-variables-in-the-order-of-member-declaration

10 апр, 21:36 80 1171410

>>1171199
oн не int@ принимает а правую часть. но почему - хз.

Ответы71828

10 апр, 21:43 81 1171415

>>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 бита, ЗА вторую переменную. потому и запись туда двойки на нее не повлияет.

Ответы714837159972679

11 апр, 00:53 82 1171483

>>1171415
Да ни хуя вы не поняли. В основном из-за того что я выбрал нерабочий пример, но всё же.
Подразумевал я вот что - если создать на стеке две переменные, размер которых меньше машинного слова (а стек выровнен по машинному слову), то они не будут расположены последовательно, а между ними будет промежуток (в данном случае в пол-слова). С чего вы (сколько вас тут семенов) взяли "int по умолчанию", если я специально написал int32_t@?

Ответы71598716987172574903

11 апр, 01:14 83 1171491

товарищи, при разработке проекта потребовались знания принципа работы клиент - сервер подключения через сокеты, и описания клиента и сервера.
т.к. в стандарте либ для работы с сетью нет, а гуи пишется на qt, то решил так же его поюзать
внимание вопрос: может кто подкинуть литературы по
1. архитектура клиент - сервер, как же оно взаимодействует и что нужно знать для этого
2. работа с сетями с помощью qt (Qt_Network), документацию пока не хватает мозгов осиливать, а переводов нормальных не нахожу
мне самое главное, чтобы как можно доступнее было, т.к. сам тугодум еще тот, пока вкурю что-то можно быстрее застрелиться.
спасибо заранее!

Ответы71494715477397674417

11 апр, 01:28 84 1171494

>>1171491
что за софт? какую прикладную задачу решает?

Ответы71495

11 апр, 01:33 85 1171495

>>1171494
банальный desktop-чат, в теории должен иметь все базовые функции современных меседжеров (авторизация, передача сообщения, файла, создание конференции и т.д.)

Ответы71509715187160074020

11 апр, 02:46 86 1171509

>>1171495
Ты "разрабатываешь проект", спрашивая у других программистов как пользоваться кьютом и как организовать клиент-серверное взаимодействие "как можно доступнее"? На мой взгляд это повод задуматься. Иди маны почитай самостоятельно.

11 апр, 03:45 87 1171518

>>1171495
ну дык и глянь протоколы взаимодействися опенсорсных менеджеров которых десятки с сотнями разновидностей
и сделай так же

Ответы73977

11 апр, 08:41 88 1171547

>>1171491
Computer Networks, Tannenbaum.

Ответы71699

11 апр, 11:47 89 1171598

>>1171483
С тем же успехом можно сказать, что они занимают машинное слово целиком.

11 апр, 11:48 90 1171599

>>1171415
Если бы ты ещё писал нормально (и макаба не ломала разметку).

11 апр, 11:48 91 1171600

>>1171495
>банальный

11 апр, 14:58 92 1171687

>>1171230
Ага, дошло.

28 Кб, 462x414
11 апр, 15:04 93 1171698

>>1171483
>написал int32_t@

Опять за свое?

11 апр, 15:05 94 1171699

>>1171547
толсто

11 апр, 15:34 95 1171725

>>1171483
TLDR; Все беды от слабой типизации в c++

Ответы73929

11 апр, 16:10 96 1171756

Аноны, начитался про d-pointer'ы в С++. Возник вопрос, почему добавление новых функций в DLL не ломает бинарную совместимость?
Проверил: сделал DLL и прогу, вызывающую функцию из этой либы. Дописал в либу 2 новых функции: перед и после старой. Пересобрал либу (прогу не трогал), всё норм работает.
Ведь функции вызываются по адресу? Если я дописал новую функцию перед старой, должен был измениться адрес старой?

Ответы7179171796

11 апр, 18:05 97 1171791

>>1171756
Адреса из dll подгружаются динамически.

11 апр, 18:33 98 1171796

>>1171756
Смотря как импортируешь.

11 апр, 19:33 99 1171825

>>1171032
>А так чтобы понимать почему на 64-битной машине:
Это вообще не имеет отношения к размерам типов. Лол. У тебя UB из-за некорректной арифметики указателей.

11 апр, 19:35 100 1171826

>>1171147
>Почему g++ интерпретировал int @ptr как
>int ()[2] ?
Он не "интерпретировал" int° ptr как int(°)[2].
Он "интерпретировал" `&a` как int(°)[2], т.к. `a` это int[2], а применение оператора к выражению типа `T` даёт выражение типа `T*`.

Ответы71828

11 апр, 19:36 101 1171828

>>1171410
>но почему - хз.
>>1171826
>`a` это int[2], а применение оператора & к выражению типа `T` даёт выражение типа `T*`.

11 апр, 23:50 102 1171985

Ребят, посоветуйте пожалуйста книжку по "крестам" где на вполне наглядных примерах хорошо показываются тонкости параллельного программирования. Можно и на английском, но только не Уильямса. Этот урод слишком переусложнил свои листинги лишними тонкостями оригинального стандарта. Видимо хотел повыпендриваться.

Ответы71997

12 апр, 00:17 103 1171997

>>1171985
Уильямс переусложнил своими дурацкими примерами с кубиклами и листочками с цифрами.

Проще прочитать оригинальный стандарт, чем разбираться с его аналогиями.

Ответы72007

12 апр, 00:41 104 1172007

>>1171997
Ну не знаю. Сломался на примере банкомата с ненужными там функторами и "бесконечными" передачами данных между экземплярами. Тогда я всерьёз задумался над погружением в Java с его суперклассами. Хорошо что одумался.

12 апр, 08:20 105 1172070

Можно ли как-то сделать, чтобы один класс мог использовать функции другого класса? Не совсем то, что я имею в виду наверное.
В общем, вот есть у меня класс последовательные таблицы, по дефолту они не отсортированы и там используется простой линейный поиск, а есть класс отсортированные таблицы, там уже используется бинарный поиск. Могу ли я как-то сделать так, что отсортировав последовательную таблицу она стала имитировать поведение другого класса отсортированные таблицы? Была идея сделать в каждом классе поле которое означает тип таблицы и сделать какую-нибудь обёртку над ними и в вызове функции через обёртку проверялось бы это поле и в зависимости от него применялся нужный поиск, и например применив к не отсортированные таблице сортировку это поле бы менялось на сортированную таблицу.
Или может есть какие-то не настолько костыльные методы это сделать?

Ответы72149

12 апр, 11:20 106 1172149

>>1172070
Сделай классы дружественными

Ответы72186

12 апр, 12:36 107 1172181

Аноны, переодически приходит задача писать gui. Что взять? Студия идет нахой, я думаю. Есть решение эклипс, qt, netbeans, code::blocks и эмбаркадеро.
Что выбрать? Я так понимаю два последних имеют возможности быстрой разработки ( RAD)

Ответы7220772676726837395874862

12 апр, 12:50 108 1172186

>>1172149
Я имею в виду, сделать так, чтобы при вызове одной и той же функции (название имею в виду) в зависимости от типа класса вызывались разные функции. В этом примере линейный или бинарный поиск.

Ответы72190

12 апр, 12:53 109 1172190

>>1172186
То есть именно без наследования.

Ответы7222572232

12 апр, 13:18 110 1172207

>>1172181
>Студия идет нахой, я думаю.
Такой пиздец. Вчера решил поставить, три раза запускал установщик и три раза выключал. Выбирал-выбирал компоненты, но всё равно хочет он мне кучу говна устанавливать, бейсики, блядь, неведомые никому неизвестные кроме секретного отдела мокрософта языки, просто впизду.

12 апр, 13:41 111 1172225

>>1172190
Шаблон проектирования декоратор

Ответы72288

12 апр, 13:49 112 1172232

>>1172190
Или стратегия. Сам посмотри что лучше подойдет. Мне лень разбираться

12 апр, 15:27 113 1172288

>>1172225
Спасибо, почитаю.

12 апр, 17:57 114 1172413

Друзья подскажите что значит std::nothrow я как понял какя-то фича на случай если не удастся выделить память через new? Но как себя ведeт не понял.

Поясните по хардкору пожалуйста.

Ответы724627246572474

12 апр, 18:00 115 1172415

Есть ли по C++ туториал наподобие Кантора по JS? Чтобы было интерактивно, с задачами и решениями? Книжка Липман-Ларойе-Му неплоха, но проверять свои ответы на вопросы перепечатыванием текста программ и компиляцией - это перебор.

Ответы72471

12 апр, 18:48 116 1172462

>>1172413
>Друзья
не коллега, а конкурент!

12 апр, 18:52 117 1172465

>>1172413
и еще это гуглится и понимается за минуту: перегруженный оператор new и все такое..
изи-пизи

12 апр, 18:53 118 1172471

>>1172415
нет в нем необходимости
задроты и так все проботают по книгам-мануалам лет за десять
а вкатывальщики не нужны в крестах, бесполезный балласт

12 апр, 18:56 119 1172474

>>1172413
http://lmgtfy.com/?q=nothrow+c+++для+ебланов

12 апр, 20:09 120 1172529

Вот есть у меня поиск в глубину, он реализуется через рекурсию. Вопрос в том, есть ли способ засунуть туда вектор, объявленный в main_е, без всяких указателей и прочего.

Ответы72568

12 апр, 20:31 121 1172538

Важно ли в каком месте в классе находится указание о дружественном классе?

12 апр, 21:19 122 1172568

>>1172529
"у меня под полом подземный стук"
смотря где он у тебя находится, этот поиск. может туда ничего больше и не влезет.

Ответы7262273210

12 апр, 23:03 123 1172622

>>1172568
http://www.e-maxx-ru.1gb.ru/algo/dfs
Код почти как там. Какие есть способы отправить вектор в функцию?

Ответы73212

13 апр, 00:41 124 1172676

>>1172181
Qt. В коудблокс тухлый и инопланетный wx с макросами на каждый чих, у дельфей доисторический конпелятор и проприетарщина, у эклипса/нетбинса тот же кьют, только помноженный на жаботормоза.

13 апр, 00:48 125 1172679

>>1171415
>на 64 битной системе int по умолчанию - 64 бита
На 64 битной системе и инт и даже лонг обычно 32 бита, прикинь.

Ответы73327

13 апр, 01:07 126 1172683

>>1172181
ты совсем дебил?

Что такое "нужен гуй" и "студия идет нахуй"? Ты что мелешь вообще? Поехавший

Ответы72803

13 апр, 09:26 127 1172803

>>1172683
Да бля я контрлеры через шаблоны хочу депенси инжектить, чтобы все реактивно в функциональном стиле, солид, кисс, вот эта вся хуйня, буду применять паттерн наблюдатель используя синглетоны и MVVVVC. Мне нужно чтобы легко без ебли с мейками и галпами там, студия меня не устраивает просто, ее мс делали затупки, мне лучше что-то от Линуса Торвальдса или ебашить темплейты на xml под андроид, как думаешь?

Ответы72849

13 апр, 12:44 128 1172849

>>1172803
>Линуса Торвальдса
Юзай GCC будет тебе счастье.

13 апр, 22:12 129 1173210

>>1172568
чувак, а ты уверен что тебе не в тред новичнок?
отправь его как параметр

13 апр, 22:13 130 1173212

>>1172622
как параметр

13 апр, 23:58 131 1173287

Есть программа, которая с помощью URLDownloadToFile пытается скачать картинки. Каждый раз, она вставляет случайную переменную в ссылку. Так вот, при её запуске в многопотоке, через
for (int i = 0; i < threadsCount; ++i) {
thr = thread(tryURL);
}
В одну секунду работает только 4 потока. Как я только не пробовал обходить это ограничение, ничего не получается.
InternetSetOption(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &maxConns, sizeof(DWORD));
Тоже не сработал.
Как сделать чтобы программа в одну единицу времени пробовала 100 разных ссылок?
Если нужен полный код этой говнопрограммы, напишите.

Ответы737747429675681

385 Кб, 500x281
Вопрос знатокам 14 апр, 00:23 132 1173318

Cкомпилится ли на C++ код
int size = 3;
double arr[size];
???

Ответы733287334878243

14 апр, 00:47 133 1173327

>>1172679
Схуяли? Сделай Build -> Debug x64 вывод sizeof(int). 8 же.

Ответы73458

14 апр, 00:49 134 1173328

>>1173318
Если arr[size] у тебя в автоматической памяти (в теле функции), то в gcc да, но это вроде пока расширение языка от gcc, а не стандарт.

14 апр, 01:15 135 1173344

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

Ответы73464

14 апр, 01:31 136 1173348

>>1173318
в С++17 или в gcc (расширение) - да

Ответы7348278791

14 апр, 11:27 137 1173458

>>1173327
http://rextester.com/UEUSF17868

Ответы73930

14 апр, 11:45 138 1173464

>>1173344
Мейерс - Эффективное использование С++.

14 апр, 12:17 139 1173482

>>1173348
>в С++17
Што?

Ответы7349873510

14 апр, 13:05 140 1173498

>>1173482
В компиляторе, который поддерживает стандарт С++ 17-го года.

Ответы73518

14 апр, 13:40 141 1173510

>>1173482
C++17 берет С11, как базовый стандарт С, в котором есть VLA

Ответы7351873521

14 апр, 13:48 142 1173518

>>1173498
>>1173510
http://eel.is/c++draft/dcl.array
D1 [ constant-expression_{opt} ] attribute-specifier-seq_{opt}

14 апр, 13:52 143 1173521

>>1173510
А C++11 брал C99 как базовый стандарт. В C99 нет VLA?

14 апр, 20:36 144 1173774

>>1173287
Бамп

15 апр, 01:20 145 1173929

>>1171725
Причем тут нахуй типизация? Беды от кривых рук тех кто исходя из неверных знаний матчасти (выделение в автоматической памяти переменных с sizeof(T) != sizeof(T*)) пишет непереносимый код.

15 апр, 01:21 146 1173930

>>1173458
Ты прав, реально 4 байта. Хз почему.

Ответы73935

15 апр, 01:40 147 1173935

>>1173930
Зависит от системы и компилятора. Размер инта стандартом не определен.

15 апр, 02:38 148 1173958

>>1172181
delphi

15 апр, 04:55 149 1173976

>>1171491
Ой не знаю, Qt для этого...

Попробуй поюзать WT, там вроде есть всякие шляпные готовые хэндлеры + формы. Он у меня сразу встал с исходников под mvs 17 (+ очень советую vcpkg под винду, конан под линь вроде -это установщики пакетов, гугли)

Я бы не советовал прям уж на обычных сокетах все делать - довольно нехилый пердолинг, но если напишешь шаблон который че надо кастует ок.

Поэтому попробуй поюзать boost::asio, там абстракция над сокетами - io service -> asio.read/write, примерно такая там логика/инкапсуляция основная. Прям эхо сервер бери пример и попробуй от него отталкиваться. Можно curl для работы с http/https. Если хочешь делать на websockets не знаю что посоветовать, я дохуя чего ставил ради этого но не вышло нормально разобраться (по сути там хэдэры и sha-1/... шлется да и все)

Вариантов на самом деле много. Не поленись нарисовать примерно карту проекта хотя бы (uml если сможешь). Лучше с этим поебаться пару дней чем потом блевать и бесцельно копирастить. Добра и минимального TU тебе по времени исполнения.

Ответы74077

15 апр, 04:55 150 1173977

>>1171518
+

15 апр, 06:27 151 1174020

>>1171495
Индусам спихни. Они тебе быстро наговнокодят.
Заплатишь им 50%.

15 апр, 11:35 152 1174077

>>1173976
Человеческое спасибо.

15 апр, 12:26 153 1174107

Почему Студия со временем начинает компилировать хуевый код?

Не раз замечал что некоторые вещи от постоянных сборок в студии начинают тормозить.
Вот сейчас сделал поворот сцены в GLUT по нажатию мыши, всё было хорошо поворот отображался в следующем же кадре. Чуть позже не изменяя код в повороте, прога не стала отображать поворот в реалтайм, только после того как отпущу мышь. Скопировал тот же код в minGW и там никаких проблем нет.

Ответы74152

15 апр, 13:55 154 1174152

>>1174107
99% говнокод

15 апр, 14:46 155 1174182

Может кто-то делал игру "Дурак" или кто-то находил хорошую версию. Нужно для курсача в унике.
Нашел одну версию, но не могу задебажить проект. Может кто-то поможет в телеге @andisal

Ответы74253

15 апр, 16:01 156 1174253

>>1174182
> в телеге
В этой стране помощи не ищи.

15 апр, 17:01 157 1174283

>>1170393
3 января нулевого (или первого) года, 04:00:00.

Ответы74322

15 апр, 17:03 158 1174286

>>1171117
Можешь часть объектников объединять в либу, а уже её линковать с экзешником.

6 Кб, 217x232
15 апр, 17:16 159 1174296

>>1173287
ДА БЛЯДЬ ОТВЕТЬТЕ НА ЭТОТ ПРОСТЕЙШИЙ ДЛЯ ВАС ВОПРОС, 100КК В НАНОСЕКУНДУ ДЕВОЛОПЕРЫ

Ответы74412

15 апр, 17:59 160 1174322

>>1174283
>нулевого
1970 же

15 апр, 20:33 161 1174412

>>1174296
В каком смысле "потоков"? Системных потоков?
Код поточнее есть? Платформа?

Ответы75409

15 апр, 20:34 162 1174417

>>1171491
>знания принципа работы клиент - сервер
Нет тут блять никакого особого "принципа". Сервер это тот кто слушает сокет на порту, клиент это тот кто к нему подключается. Собсно все блять, что сделать и какой протокол заюзать или самому придумать - на твое усмотрение.

16 апр, 10:45 163 1174802

>>1169708 (OP)
Посоветуйте годный туториал по связке Boost.Test с Google Mock.

Ответы74838

16 апр, 12:20 164 1174838

>>1174802
Нашёл наконец, https://www.semipol.de/2010/04/13/using-googlemock-with-the-boost-test-library.html

16 апр, 12:52 165 1174862

>>1172181
Qt, там есть язык разметки интерфейсов, типа ксамля от мс, только на основе жсона.

Ответы74948

16 апр, 14:27 166 1174903

>>1171483
> если создать на стеке две переменные, размер которых меньше машинного слова (а стек выровнен по машинному слову), то они не будут расположены последовательно
При чём тут какие-то размеры машинного слова?
В C++ про последовательное расположение можно говорить для нестатических полей класса или для элементов массива.
Два независимых объекта не располагаются ни последовательно, ни непоследовательно.

Ответы74911

16 апр, 14:37 167 1174905

Аноны, нужна помощьес

Ответы74912

16 апр, 14:54 168 1174911

>>1174903
Слышишь звон, да не знаешь, где он.

Ответы74916

16 апр, 14:54 169 1174912

>>1174905
http://sol.gfxile.net/dontask.html

16 апр, 14:59 170 1174916

>>1174911
Да читал я всю идиотскую цепочку сообщений.
Там сначала инкрементируют указатель на одну-единственную переменную и то, что она не указывает на другую независимую переменную объясняют тем, что там какое-то мифическое машинное слово в штаны им насрало.
Хотя стандарт ясно говорит, что получился указатель на первый байт за концом объекта, на который указаывал указатель до инкремента. И что этот указатель не указывает ни на какой объект, даже если случайно по этому байту начинается другой объект.
Потом толпа анскильных лалок с удивлением пялится на банальный факт, что если взять адрес у массива, то получится указатель на массив.

Ответы75541

16 апр, 15:16 171 1174924

В таком случае я не понимаю (я ньюфаг).

https://onlinegdb.com/ByOIXzG3G

Здесь в выводе получается
Value C: 5555

Не выровнены по машинному слову всё же?

Ответы749267492975581

16 апр, 15:17 172 1174926

>>1174924
>Здесь в выводе получается
Насрать что там получается.
`&b - 1` — UB.

Ответы74930

16 апр, 15:20 173 1174929

>>1174924
>Здесь в выводе получается
А здесь https://wandbox.org/permlink/xGGqr6pAqBBFNIxq не получается
Т.к. UB.

Ответы74935

16 апр, 15:20 174 1174930

>>1174926
Адрес есть? Есть. Менять можно? Можно.
Никто и не берется утверждать, что там ВАЛИДНЫЕ ДАННЫЕ будут, но это к вопросу отношения неимеет, ты тупой какой-то.

Создал себе манямирок, где ты прикрываешься ПРАВИЛАМИ в тех случаях, где тебе ЛЕНЬ УЗНАВАТЬ, как всё работает. Ну или просто у тебя болезнь мешать тем, кто хочет узнавать.

Ответы74933

16 апр, 15:24 175 1174933

>>1174930
>Адрес есть? Есть. Менять можно? Можно.
Есть. Вычитать как в том коде нельзя. См. стандарт.

> Создал себе манямирок, где ты прикрываешься ПРАВИЛАМИ в тех случаях, где тебе ЛЕНЬ УЗНАВАТЬ, как всё работает.

Лол. Моим первым языком был асм для x86. Так что не надо мне рассказывать, как всё работает.
Просто я отличаю C++ от деталей его реализации. Знаю, что такое спецификации, в том числе языка. В отличие от многих здеся.

> Ну или просто у тебя болезнь мешать тем, кто хочет узнавать.

Толку от таких псевдо-знаний в стиле "я у мамы хакир и сношаюсь с UB" — нуль.

Ответы74934

16 апр, 15:27 176 1174934

>>1174933
UB имеет НОЛЬ отношения к данному вопросу, тут язык нужен лишь чтоб смотреть в стек.
Да, с поправкой на реализацию, но сути это не меняет. Рака жопы тебе, бтв.

Ответы74937

16 апр, 15:28 177 1174935

>>1174929
Ну поменяй знак, получится.
https://wandbox.org/permlink/bwt0jUKCWKy8B0pw

Всё ещё не видишь, что вопрос не в этом.

Ответы74937

16 апр, 15:30 178 1174937

>>1174934
>UB имеет НОЛЬ отношения к данному вопросу
Разные результаты на разных компиляторах — верный признак UB. Я даже указал в чём.

>Рака жопы тебе, бтв.
Не гори, плиз.

>>1174935
>Ну поменяй знак, получится.
Поменял https://wandbox.org/permlink/O7YCl6k76ebwjbBd
Не получается.
Лол.

Ответы74939

16 апр, 15:31 179 1174939

>>1174937
Ясно, толстяк.

Ответы74943

16 апр, 15:39 180 1174943

>>1174939
>Ясно, толстяк.
В чём я толстяк?

Ответы7494574947

16 апр, 15:42 181 1174945

>>1174943
Ыбыбы я кароч кампилатер переключил ух как я иво щас ух))))

Никто, блядь, не спорит с тем, что это UB, что оно отработает неизвестно как в разных условиях, етц, етц.

Но для визуализации вопроса было бы достаточно и просто вывода адресов a и b без всякой арифметики.

Но ты просто иди нахуй, псевдо-человек, сын говна.

Ответы74947

16 апр, 15:45 182 1174947

>>1174943
>>1174945
А ещё я вообще всегда люблю ковырять хуйню и по-детски радоваться программистским мелочам, вон работа на хронокроссом и все мипсоассемблерскими штуками мне тонну удовольствия принесла, а тут ты такой нудный хуесос: UB, ЗАВАЛИ. Чтоб ты от голода сдох.

Ответы74955

16 апр, 15:45 183 1174948

>>1174862
Ну ты еще напомни, что QML - говно говен в сравнении с божественным XAML, да и в целом WPF >> Qt, жаль только, что .net.

Ответы75015

16 апр, 16:05 184 1174955

>>1174947
>А ещё я вообще всегда люблю ковырять хуйню и по-детски радоваться программистским мелочам, вон работа на хронокроссом и все мипсоассемблерскими штуками мне тонну удовольствия принесла
Найди себе бабу.

Ответы74956

16 апр, 16:07 185 1174956

>>1174955
Мимо.

Ответы74957

16 апр, 16:08 186 1174957

>>1174956
А, ты из этих...

Ответы74959

16 апр, 16:09 187 1174959

>>1174957
Ну не смешно. Не мешала мне любимым делом заниматсья ни предыдущая баба, ни текущая.
Даже наоборот.

16 апр, 16:59 188 1174979

сап, заранее простите за нубский вопрос

есть класс (нод дерева) с примерно такими функциями внутри:

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 ?
или я таки где-то проебался ?
если нужно могу дописать весь используемый код, лень было заливать

Ответы749827498375146

16 апр, 17:03 189 1174982

>>1174979
left, right, и parent, разумеется, указатели, мейлач почему-то проебал звездочки
теперь я понял, что лучше было не полениться и залить

16 апр, 17:06 190 1174983

>>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.

Ответы74988

16 апр, 17:19 191 1174988

>>1174983
значит, что корень может обратиться к удаленному, с помощью delete ноду, и все будет работать так же, как и до delete
т.е. если у меня был вывод:
cout << node->t
и он выводил, скажем, 10
то и после удаления он продолжит выводить 10
для меня это оказалось критично, т.к. я делал проверки на наличие детей с помощью node->left и node->right
по какой-то причине, я решил что delete обнулит указатели, или как-то пометит NUll'ями

>Indirection through an invalid pointer value
получается, это мой случай ?

Ответы74989

16 апр, 17:21 192 1174989

>>1174988
>значит, что корень может обратиться к удаленному, с помощью delete ноду, и все будет работать так же, как и до delete
Может да, а может нет.

>>Indirection through an invalid pointer value
>получается, это мой случай ?
Да.

16 апр, 17:37 193 1174993

Анон, подскажи плиз. Пишу софтинку под винду, которая
1. Имеет исполняемый файл и библиотеки.
2. Имеет файл настроек, которые могут изменяться пользователем в процессе работы.
3. Имеет временные файлы, которые генерируются в процессе работы программы.
Как это лучше разместить на диске?
Т.е. понятно что п.1. идёт в условные Program files
Куда отправить п.2? В AppData\Roaming\Programname? Но если мы устанавливаем программу для "всех пользователей", то она не сумеет подцепить настройки из чужой AppData (Или забить на это и у каждого пользователя будут свои настройки. Не хотелось бы).
Где создавать временные файлы из п.3? В AppData\Roaming\Programname\MyTempData?

Что вообще можно почитать по этому вопросу?

Ответы74996

16 апр, 17:41 194 1174996

>>1174993
А у тебя больше одного пользователя предполагается?

Ответы74998

16 апр, 17:46 195 1174998

>>1174996
Ну есть возможность что установил и настроил пользователь-1, а работает в дальнейшем пользователь-2.

Ответы7500175013

16 апр, 17:48 196 1175001

>>1174998
Если приватность настроек не нужна и разным пользователям не нужны разные настройки, то всё складываешь в program files.

Ответы7500275147

16 апр, 17:50 197 1175002

>>1175001
А не возникнет проблемы с UAC, админправами и прочим?

Ответы75004

16 апр, 17:53 198 1175004

>>1175002
Проблемы разрешимые.
Я пока не встречал среды с подобными политиками локальной безопасности, она обычно внешняя. В крайнем случае дадите права на запись в отдельную директорию, если вдруг таковых нет.

Ответы75007

16 апр, 17:54 199 1175007

>>1175004
Thnks!

16 апр, 18:18 200 1175013

>>1174998
Если настройки для всех пользователей, то есть же C:\ProgramData

Если что папку можно (при установке или первом запуске) создать с нужными правами.
> Где создавать временные файлы из п.3?
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa364992(v=vs.85).aspx
Либо взять из переменных сред TMP или TEMP.

Ответы75151

16 апр, 18:21 201 1175014

Гайз, скажите, это адекватное тестовое задание?

Вышлите пожалуйста примеры когда с реализацией ООП в C++ без Qt на почту 1&W4ANUSinmdllk7PUNCTUMcov0"m

Реальная история, я не тролль, только что попросил у них полтос на герандос

Ответы75016

16 апр, 18:24 202 1175015

>>1174948
Так он не хотел студию, глаза протри.

16 апр, 18:25 203 1175016

>>1175014
> ООП в C++ без Qt
А какое ООП есть в Qt кроме создания сабклассов QObject (и ему подобных)? mic даже шаблоны не поддерживает (хотя возможность создавать шаблонные qobject'ы в самом qt всё же есть).

Ответы75017

16 апр, 18:26 204 1175017

>>1175016
ну сигналов-слотов они не хотели вангую

Ответы75018

16 апр, 18:27 205 1175018

>>1175017
хотя это не ООП, действительно

16 апр, 18:47 206 1175023

Требуемый опыт работы: 3–6 лет
Полная занятость, удаленная работа
Наша компания занимается разработкой для зарубежных компаний.
Требования:
Нужен опытный C++ разработчик, хорошо если будет знания С# (но не обязательно).
Опыт от 3-х лет в указанной области
Проект технически сложный, много кастомного кода, поэтому знания каких-то определенных библиотек мы не требуем, нужно просто очень хорошо разбираться в языке и уметь разрабатывать под разные платформы.
Опыт использования чистого C++ а не только QT
Английский не обязателен.
Условия:
Офис в центре
Преподаватель английского происходит 2 раза в неделю
Доброжелательный коллектив
Технически-грамотное руководство
Адрес
Екатеринбург, улица Добролюбова, 16
Email:
1TYVANUSinmdlL^APUNCTUMcIXxom

Ответы75108

16 апр, 18:52 207 1175025

> Преподаватель английского происходит 2 раза в неделю

16 апр, 21:40 208 1175108

>>1175023
>Технически-грамотное
>этот дефис

Ответы75124

16 апр, 21:57 209 1175124

>>1175108
Чисто Технически - грамотное руководство

16 апр, 22:15 210 1175138

Имеет ли вообще смысл пихать STL контейнеры в динамическую память? Они же, блядь, сами активно используют её. Если с помощью new или там allocate делать, строки например, то какая часть мяса будет в динамике, или там только методы класса с указателем на другую динамку где уже лежит конкретно мясо?

16 апр, 22:43 211 1175146

>>1174979
ты деструктор-то покажи может.

16 апр, 22:45 212 1175147

>>1175001
возникнет. на всех свежих виндах, если пользователь не админ - программа в програм филес писать не может. в свою папку дллки класть. конфиги а аппдату.
но вообще поищи. у микрософта был гайдлайн четкий куда что класть.

Ответы75151

16 апр, 22:57 213 1175151

>>1175147
>конфиги а аппдату
Так сейчас и делаю. Только не в саму аппдату, а в програмдату как советовал >>1175013 , должно прокатить. А гайдлайны искал, что-то они не всплыли до решения в /pr/

98 Кб, 1261x739
17 апр, 16:13 214 1175409

>>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 пробовал, ничего не меняется.

98 Кб, 1261x739
17 апр, 16:13 214 1175409

>>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 пробовал, ничего не меняется.

Показать весь текст

17 апр, 16:27 215 1175415

Это что, мне вместо этой хуйни надо curl прикрутить? Пиздец, сложно

17 апр, 17:05 216 1175457

Чо про потроха почитать - ну там vtable, ромбовидное наследование и прочая ебень.

17 апр, 17:42 217 1175541

>>1174916
Жопой ты читал. Речь не о стандарте, а о его реализации на машинах x86 - о выделении автоматической памяти на стеке.
int main(){int x, y;} // две переменные в автоматической памяти, стандарт об этом нихуя не говорит
Но на домашних компьютерах эти переменные будут выделены на стеке. Казалось бы последовательно, но на самом деле выровнены по границам 4 / 8 байт. Хули тут непонятного?

Ответы7554575567

17 апр, 17:44 218 1175545

>>1175541
Два шорта по какой границе будут выравнены?

Ответы75550

17 апр, 17:46 219 1175550

>>1175545

По границе машинного слова.

Ответы755527557075574

17 апр, 17:46 220 1175552

>>1175550
Вычитание одного адреса из другого дало 2.

Ответы75570

26 Кб, 667x231
17 апр, 17:52 221 1175567

>>1175541
>Жопой ты читал. Речь не о стандарте, а о его реализации на машинах x86 - о выделении автоматической памяти на стеке.
Это ты жопой читал. Речь шла о том, нафига вообще знать, сколько байт занимает тот или иной тип. Дальше начался цирк с конями.

>две переменные в автоматической памяти, стандарт об этом нихуя не говорит
Откуда ты знаешь, что в автоматической памяти, если стандарт об этом нихуя не говорит?

>Но на домашних компьютерах эти переменные будут выделены на стеке.
А на пикрелейтед они вообще не выделены, потому что компьютер не домашний, а удалённый?

Ответы75572

23 Кб, 614x182
17 апр, 17:53 222 1175570

>>1175550
Этот >>1175552 опередил
Но всё равно приложу пикрил
Видимо, на x86-64 машинное слово это 2 байта.

Ответы75575

17 апр, 17:53 223 1175572

>>1175567
Мы разговаривали о реализации Стандарта (тм) (с)
на своих домашних пекарнях, ты ворвался с криками "поведение не определено покпокпок". Это конечно охуительно ценная инфа, но разговор немножко не об этом.

Ответы75574

17 апр, 17:55 224 1175574

>>1175572
>Это конечно охуительно ценная инфа, но разговор немножко не об этом.
Инфа типа >>1175550
>По границе машинного слова.
(особенно с учётом того, что это не так)
видимо, на порядок ценнее.

17 апр, 17:56 225 1175575

>>1175570
Окей, я сливаюсь.

17 апр, 17:57 226 1175576

Охуеть, то есть они всё же подряд идут. Только я уже забыл, к чему всё это было.

Ответы7557975597

17 апр, 17:59 227 1175579

25 Кб, 717x18325 Кб, 713x187

>>1175576
>Охуеть, то есть они всё же подряд идут.
Ага.

Ответы75581

17 апр, 18:01 228 1175581

>>1175579
>>1174924
Ну я с этим уже приходил вчера.

17 апр, 18:27 229 1175597

>>1175576
>Охуеть, то есть они всё же подряд идут.
В разном порядке в зависимости от уровня оптимизации.
А в clang — не подряд. Но выровненные по 4 байт. Это считается размером машинного слова на 64-битной системе?

17 апр, 20:58 230 1175654

Какой наиболее простой способ скачать файл кроме urldownloadToFile??

Ответы75672

17 апр, 21:22 231 1175672

>>1175654
как я понимаю эта штука из com интерфейса интернет эексплорера. там могут быть всякие мутные внутренние ограничения.
ты не пробовал в начале программы всякие CoInitializeEx вызывать с разными параметрами?

я б вообще curl использовал.

Ответы75699

17 апр, 21:33 232 1175681

>>1173287
>В одну секунду работает только 4 потока
сколько ядер у твоего проца?

Ответы7569975752

17 апр, 22:03 233 1175699

>>1175681
4
>>1175672
я посмотрел, сложновато он подключается

Ответы75766

17 апр, 22:15 234 1175705

Я слышал, что в С++ 20 добавят модули. Это будет примерно как в питоне, и без ебатории с .h файлами?

Ответы757097572975972

17 апр, 22:21 235 1175709

>>1175705
Хо-хо. Мне кажется пока все библиотеки не перейдут на модули, ебатория все ещё будет. Ну и макросы в модулях не поддерживаются.

Ответы75950

17 апр, 22:42 236 1175729

>>1175705
Я это ещё про 17 слышал.

17 апр, 23:09 237 1175752

>>1175681
>сколько ядер у твоего проца?
А какая на хрен разница? Если речь о конкурентности а не о тру-параллелизме.

17 апр, 23:31 238 1175766

>>1175699
>4

17 апр, 23:33 239 1175770

Посоны, на крестоконфу идет кто на этой неделе?

Ответы75773

17 апр, 23:37 240 1175773

>>1175770
я все знаю о чем там будут балакать

Ответы75774

17 апр, 23:39 241 1175774

>>1175773
Ну так ясен хер, расписание же висит.
Хоть на Александреску живого посмотрю.

Ответы75776

17 апр, 23:44 242 1175776

>>1175774
дык александреску отошел же от крестов, о чем он там балакать будет
но зато будет вандервоод, саттер

Ответы75777

17 апр, 23:46 243 1175777

>>1175776
Про оптимизацию. Но один хуй он наверное компетентнее всех кто там будет вообще.
Жаль что не про дишечку.

18 апр, 11:34 244 1175950

>>1175709
>макросы
Рак языка.
А не, извините, перепутал с темплейтами.

Ответы75960

18 апр, 11:56 245 1175960

>>1175950
>А не, извините, перепутал с темплейтами
Чего в них плохого? В C# они тоже есть.

18 апр, 12:56 246 1175972

>>1175705
>Это будет примерно как в питоне, и без ебатории с .h файлами?
Заголовочные файлы и ебатория останутся. Единственная разница - с модулями конпелятор будет знать, когда ему надо парсить .h заново, а когда - нет.

18 апр, 13:26 247 1175982

Мм, есть один проект из 00, его перекомпилировали на vs9.Прошло время и мне необходимо теперь этот проект компильнуть на х64, сделал конфиг в студии, он автоматически настроился, а на выходе я получаю 2019 ошибки линкера. Курение манов не помогло, куда еще копнуть? Проект юзает oci ( Oracle C libs) .

Ответы76009

18 апр, 14:48 248 1176007

https://github.com/hex4d0r/hCrypt
Короче, Два.сн, есть исходники криптора на cpp.
Помогите скомпилировать, у самого не получается.
мимобыдлокодер

Ответы76010

18 апр, 14:51 249 1176008

https://github.com/SandPox/Polymorphic
ну или этот

18 апр, 15:03 250 1176009

>>1175982
ответ очевиден: твоей квалификации явно недостаточно для выполнения данной модернизации
лучшее решение - уйти из отрасли, оставив место более компетентным людям

18 апр, 15:05 251 1176010

>>1176007
в такие проекты обычно специально вставляют "детские" ошибки, чтобы оградится от некомпетентных людей типа тебя
не троллю
ищи в коде пару мест, исправляй

18 апр, 15:11 252 1176014

Подскажите, как на плюсах в линуксах (одинаковые дистрибутивы) обеспечить портируемость программы, когда я использую сторонние библиотеки?
В винде понятно, условно кидаешь к экзешнику нужные библиотеки и все. А как дела с линуксом обстоят?

Ответы76018

18 апр, 15:21 253 1176018

>>1176014
самый правильный, наверное, способ: через пакеты, менеджеры пакетов, типа deb - dpkg - apt
либо делают статическую линковку с библиотеками
сейчас еще можно легкую виртуализацию использовать, докер, например
в общем, решение будет зависеть от того что за софт ты пишешь

Ответы76019

18 апр, 15:25 254 1176019

>>1176018
я вот нагуглил статическую линковку.
Пару библиотек opencv надо для обработки изображения. И, возможно, cuda. Хотя на обеих машинах она должна быть в теории.

18 апр, 20:00 255 1176204

Посоны, в boost случаем нет статических векторов типа std::array, но чтобы имитировали поведение динамических.
То есть чтобы size() выдавал разные значения и можно было делать push_back до установленного в шаблоне предела. Лень самому писать.

И ещё, кто-нибудь копался в устройстве STL? Это будет очень сложно вытянуть оттуда std::array и слегка допилить его напильником?

Ответы762127621376229

18 апр, 20:18 256 1176212

>>1176204
в векторе резервируешь память
дальше работаешь с ним
все

Ответы76213

18 апр, 20:19 257 1176213

>>1176212
>>1176204
или те на стеке надо обязательно?

Ответы76251

18 апр, 20:23 258 1176219

ну а вообще в бусте аж несколько реализаций векторов на статике, выбирай

Ответы76251

18 апр, 20:26 259 1176223

хотя я в этом не разбираюсь

сорри

18 апр, 20:27 260 1176229

>>1176204
static_vector

Ответы76251

18 апр, 21:00 261 1176251

>>1176229>>1176219
Вот это охеренно, то что нужно. Хз почему я сам найти не мог, вроде зашел на страницу буст со списком контейнеров, но там не было.

>>1176213
Да, именно что на стеке надо, а может я просто ебло.

Короче в проекте считается всякая математика, а в качестве векторов используются std::vector, при том что чаще всего размеры небольшие 2-10 элементов и известны заранее.
Когда пришло время распараллелить это дело std::threads, выяснилось, что производительность не растет. Долго над этим бился и пришел к выводу, что динамические вектора кучу насилуют. Подключил tcmalloc, всё равно плохо.
Заменил по возможности вектора на статические массивы и производительность относительно одного ядра сильно увеличилась. Хочу ещё увеличить, поэтому надо все стандартные вектора выпилить.
Пытался найти способ сделать раздельные кучи для тредов, но как-то безуспешно.

Ответы762527631876473

18 апр, 21:01 262 1176252

>>1176251
>Долго над этим бился и пришел к выводу
На кофейной гуще погадал?

Ответы76264

18 апр, 21:13 263 1176264

>>1176252
Сначала думал, что там какие-нибудь глобальные переменные переписываются, или мьютексы где-то спрятаны, про которые я не знаю, может false sharing влияет.
Короче поставил замер времени на вычислительную функцию, потом начал из неё по чуть-чуть выпиливать куски. В результате внутри этой функции остались только вектора, которые в цикле создаются.
Ну и ещё по ходу дела установил, что пропускная способность памяти на моем ПК примерно в 2.5 раза больше, чем скорость записи с одного ядра. Соответственно это предельное ускорение для вычислительных программ.
Поэтому теперь тестирую на узле с 32 ядрами.

18 апр, 22:03 264 1176318

>>1176251
>Долго над этим бился и пришел к выводу, что динамические вектора кучу насилуют.
Там выполняется поиск свободного места в куче, наверное.

54 Кб, 1074x512
19 апр, 06:31 265 1176467

Аноны, написал я короче код(ну как написал, частично списал), но он не работает - 9 ошибок.
Прилагаю скрин с Code::Blocks.
https://pastebin.com/Dj0rrWb6
Оригинал кода:
https://www.youtube.com/watch?v=hBgHeC2Edvs
Тыкался, но ничего из этого не вышло,
ПАМАГИТЕ!

Ответы764907651576541

19 апр, 06:52 266 1176473

>>1176251
>а в качестве векторов используются std::vector
Используй Eigen

19 апр, 08:26 267 1176490

>>1176467
Что ж ты, блядь, за человек такой.
Тебе компилятор сам все сказал - "не могу неявно преобразовать типы, не могу найти переменную в области видимости и ты не закрыл скобку во втором ифе на 118, сука, строке".
Нет, ты серьезно? У тебя же есть все данные по ошибкам. Куда ты там тыкался?
Замени wchar на char (или найди в windows.h такую же функцию с wchar аргументами - обычно ФункцияНэймW), объяви в нужном месте SelfAutorun и убери нахуй первую скобку во втором ифе на 118 строке или закрой уже не.

Ответы76494

19 апр, 08:48 268 1176494

>>1176490
> Тебе компилятор сам все сказал
Два чаю. Это тебе не искать опечатку в шаблонном коде, когда компилятор выдаёт пол-сотни ошибок и ни одна из них не говорит в чём дело. Например если при вызове шаблонной функции указал один из нескольких параметров и ошибся с ним, а компилятор вместо остальных подставил хуйню и спустя пару вызовов жалуется именно на свои додуманные параметры, а не на мой - неправильно указанный.

19 апр, 09:36 269 1176504

кто знает, как socket'ы подключить(в частности -lws2_32) к gcc?

Ответы76589

19 апр, 10:13 270 1176515

>>1176467
Пиздуй отсюда мамким хакир.

мамкинхакир 19 апр, 11:21 271 1176541

>>1176467
https://pastebin.com/FtF44d06
Все исправил, нужно было просто libws2_32.a из mingw для работы с сокетами поставить.
Но на почту так и не отправляет,
для теста не забудьте свой емейл указать и loglength с 1000 сменить на 10
я вообще не понимаю, почему должно отправляться письмо, ведь пароль не указан

19 апр, 13:07 272 1176589

>>1176504
На винде-то?
Попробуй
#pragma comment(lib, "ws2_32.lib")

19 апр, 18:28 273 1176819

bump

Ответы76958

sage 19 апр, 22:27 274 1176958

>>1176819
sage

20 апр, 03:31 275 1177024

Объясните тупому что такое move и &&ссылки ан rvalue. Как эта хуйня работает?
На какой нибудь простой аналогии, ну там про говно берёзу и ветер.

Ответы7702577041770427705178096

20 апр, 03:41 276 1177025

>>1177024
По большей части они нужны для указанию компилятору, что тот кто вызывает функцию отказывается от этих объектов и больше их использовать не будет. Используется например в unique_ptr, чтобы убедится, что не будет существовать двух копий этого объекта (в этом случае конструктор копирования удаляется и разрешается только перемещение). Либо указывает на возможность перемещения контейнера, чтобы не копировать всё содержимое, поскольку явно указывается, что он больше не будет нужен и вызываемая функция может с ним делать что угодно.

20 апр, 06:02 277 1177041

>>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 , чем ждать объяснения, благо, там не много.

20 апр, 06:03 278 1177042

>>1177024
>rvalue
А про это тут http://eel.is/c++draft/basic.lval

20 апр, 07:55 279 1177051

>>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.

Ответы77110

20 апр, 11:31 280 1177110

>>1177051
std::move на любые указатели действует, не только на смарты?

Ответы7711477116

20 апр, 11:35 281 1177114

>>1177110
std::move действует на любые типы, ему похрен. Хоть на функции.

20 апр, 11:35 282 1177116

>>1177110
На массивы действует тоже. В общем, на любые.

Ответы77193

20 апр, 13:07 283 1177193

>>1177116
Что-то у меня не получается с массивами. Дай пример.

Ответы77221

20 апр, 14:53 284 1177221

>>1177193
int a[2];
std::move(a); // вызвал move для массива

Ответы7722977317

20 апр, 15:15 285 1177229

>>1177221
Но куда ты мувнул этот массив? Перепробовал несколько вариантов, либо компайлер выдает ошибку, либо массив а остается прежним. Конкретный пример не можешь дать? С std::vector-ом то все понятно, а вот с обычным массивом, нихуя.

Ответы77232

20 апр, 15:23 286 1177232

>>1177229
>Но куда ты мувнул этот массив?
Никуда. Зато можешь мувать из него элементы.
Кстати, вот https://wandbox.org/permlink/VOb4z5ZUnVZ2aMDn
Если кто-то будет тебе говорить, что E1[E2] эквивалентно *((E1)+(E2)), можешь спрашивать, почему при замене 1 на 0 в #if начинает вызываться copy-конструктор вместо move-конструктора.

Ответы77233

20 апр, 15:25 287 1177233

>>1177232
Что за пиздец

Ответы77269

20 апр, 16:36 288 1177269

>>1177233
Не нравятся макросы — хуяч руками.

Ответы77295

20 апр, 17:00 289 1177295

>>1177269
Лучше объясни — что там происходит.

20 апр, 17:13 290 1177317

>>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
}

Ответы773477741877954

20 апр, 18:38 291 1177347

>>1177317
>То, что ты пишешь, не имеет смысла.
Жизнь вообще бессмысленна.

7 Кб, 473x185
20 апр, 21:20 292 1177418

>>1177317

Ответы77436

170 Кб, 960x640
20 апр, 21:37 293 1177427

Анон, обосри сделай, пожалуйста, код-ревью моего проекта и расскажи, что в нем плохо с точки зрения архитектуры и кодеса.

Задача: разработать систему расчета зарплаты для Employee, Manager и Sales на Qt. В формулах расчета ЗП учитывается число подчиненных. Данные берутся из базы SQLite. Подчиненных могут иметь Manager и Sales, древовидная структура подчиненности может быть любой глубины, поэтому я ичпользовал паттерн компоновщик, чтобы можно было работать с частями дерева как с одним целым.

https://github.com/aeshes/work/tree/master/SalaryCalc5/src

Ответы7747477714

20 апр, 21:53 294 1177436

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

Кстати, я хотел спросить, а что за чуваки тут сидят на постояннке? В чем профит сидеть чужие коды разбирать, на вопросы отвечать и всякое такое?

Ответы77601

20 апр, 22:51 295 1177471

Александреску расписался на моем бейджике на конфе. В рамочку поставлю

Ответы77473

20 апр, 22:54 296 1177473

>>1177471
Бля. А я не стал автограф брать - на блокноте было стремно, знал бы заранее - книжку бы взял (по дишечке, азаза).
Календарик от ПВС студии нафармил?

Ответы77479

20 апр, 22:56 297 1177474

>>1177427
Использовать qt но тесты от гугла... Ты ебанутый? Зачем?

Ответы77714

20 апр, 23:04 298 1177479

>>1177473
Нет, забил. А завтра мне вообще выступать ололо диванон

Ответы7748377485

20 апр, 23:10 299 1177483

>>1177479
10 человек. Маловато для диванона. Какой track хоть?

Ответы7748477488

20 апр, 23:10 300 1177484

>>1177483
Тьфу, многовато в смысле.

20 апр, 23:11 301 1177485

>>1177479
Дима, ты?

20 апр, 23:13 302 1177488

>>1177483
Не скажу :(

21 апр, 00:05 303 1177505

Блять нахуя в С++ добавали brace initialization, ну например int a{4}. Это же пиздец как неудобно и не интуитивно, и только добавляет языку лишнию комплексность. Я понимаю когда инициализируешь массивы, это удобно. Но эту хуйню можно как я понял везде хуячить.

Ответы7751177518775607761277664

21 апр, 00:20 304 1177511

>>1177505
Тоже бесит. Почему бы блять просто массивы как в дишечке в скобках квадратных не объявлять, тогда ни с чем никогда не спутаешь.
А того что нужно, ну, чтобы сразу поля по имени инициализировать - это как раз таки хуй добавили.

Ответы77564

21 апр, 00:26 305 1177518

>>1177505
struct Zalupa {
bool hui;
char pizda;
};
std::vector<Zalupa> zalupki;
zalupki.push_back({false, 'a'});

Ответы7752177525

21 апр, 00:28 306 1177521

>>1177518
И че, не могло бы распарсить zalupki.push_back(false, 'a') ?

Ответы7752377525

21 апр, 00:29 307 1177523

>>1177521
error: no matching function for call to ‘std::vector<main()::Zalupa>::push_back(bool, char)’

21 апр, 00:29 308 1177525

>>1177518
>>1177521
Вы про емплейс слышали?

Ответы7752877530

21 апр, 00:30 309 1177528

>>1177525
Пушбэк делает эмплейс, если видит rvalue.

21 апр, 00:31 310 1177530

>>1177525
Это сейчас к предмету разговора отношение не имеет.
Суть в том, что make_typle сука без скобок аргументы хавает и передает в конструктор - мог бы и бушбак догадаться, если пушим структуру и то что передается - по параметрам подходит в конструктор.

21 апр, 01:29 311 1177560

>>1177505
Да с этой хуйней еще накосячить можно
std::vector<int> v(3, 9);
std::vector<int> v{3, 9};
Первый вариант создает, как и ожидается, три элемента с числом 9. А вот второй вариант создает всего два элемента с числами 3 и 9. Некоторые дауны еще говорят, чтобы использовать эти инициализаторы где только можно! А я скажу, если точно не уверен, то лучше не использовать их. Но у них есть одна приятная фишка - они не позволяют скрытые касты. Например:
int anal = 6.9; // норм
int anal{6.9}; // ошибка компайлера

Ответы77621

21 апр, 01:35 312 1177564

>>1177511
GCC кстати давно умеет делать
>FooBar fb = { .foo = 12, .bar = 3.4 };
но это расширение компилятора, причем эта фича есть в сишке

Ответы77575

21 апр, 02:42 313 1177575

>>1177564
> причем эта фича есть в сишке
Вот зачем было убирать? Один пидор с гцц ебашит это у себя, а у меня потом не работает.

Ответы78121

21 апр, 06:52 314 1177601

>>1177436
Ну а что за десятки тысяч чуваков сидят на стэковерфлоу и подобных сайтах? Это интересно, даешь советы, сам скиллы немного прокачиваешь, читаешь срачи и тд. Плюс бывает инфа интересная. Кароче, лично я, если заняться нечем, больше люблю тут посидеть, чем листать фид в фейсбуке.

21 апр, 07:55 315 1177605

Code::Blocks подходит для окон? Началось программирование приложений, все методички дают по студии, а я не хочу насиловать некроноут (8 годиков) этим монстром. Смогу ли пользоваться MFC и что для этого надо сделать?
Есть какие-нибудь уроки по настройке Code::Blocks для разных целей? Насколько я понял, его можно под себя допилить и докачать нужное

Ответы7761077649

21 апр, 08:29 316 1177610

>>1177605
>MFC
https://wiki.wxwidgets.org/WxWidgets_For_MFC_Programmers
а вообще, если доставишь либы и дллки от студии, то сможешь и нативно собрать небось

21 апр, 08:33 317 1177612

>>1177505
Ты ничего не понимаешь в С+
https://www.linux.org.ru/forum/development/22475

Ответы776137762477709

21 апр, 08:35 318 1177613

>>1177612
Однажды я сидел у себя в офисе, и мне пришла в голову небольшая идейка,
как хоть немного восстановить баланс. Я подумал: интересно что же было бы,
если бы был язык программирования с такими широкими возможностями и такой
сложный для изучения, что никто бы уже не смог заполнить рынок толпой
программистов, пишущих на этом языке? У меня уже были тогда кое-какие мысли
по этому поводу. Вот, знаете наверно, X10 и X windows. Это тогда была такая
графическая система, которая работала на этих самых Sun 3/60. У нее были все
ингредиенты, которые мне были нужны - комплексный синтаксис, неявно
определенные сложные для понимания мрачные функции,псевдо-объектно-ориентированная структура. Даже сейчас никто не пишет чистый
код X-windows. Motif - единственный путь, если хочешь сохранить здравомыслие.

Ответы77757

21 апр, 09:46 319 1177621

>>1177560
Эта штука и сделана, чтобы не было неявных кастов.

21 апр, 09:58 320 1177624

>>1177612
Нас наебали, все в питоно-тред.

21 апр, 11:30 321 1177649

>>1177605
Пердолиться лишний раз со всеми библиотеками, ну его нахуй. Завезут тебе виндовс формс в следующем семе в расчете на то что никому переезжать со студии не надо, и крутись как хочешь.

21 апр, 12:21 322 1177664

>>1177505
int a{3.1} дает ошибку например, несужающая инициализация

21 апр, 12:22 323 1177666

Есть бутлег конфы питерской где-нибудь?

21 апр, 13:31 324 1177701

Вечер, анон. Можно ли заставить clog выводить в отдельный терминал только средствами бибилиотеки, или придется использовать винапи?

Ответы77754

21 апр, 14:04 325 1177709

>>1177612
>Вы в это так верите? Попробовали ли вы когда-нибудь сесть и поработать над проектом на C++ ? Во первых, я расставил достаточно ловушек, чтобы просто так работали только тривиальные проекты.
>Понимаете теперь? И я уверен, что он заслуживает этих денег. Отслеживание всех этих ловушек, которые я встроил в C++ - не легкая работа. И, как я говорил раньше, каждый программист на C++ чувствует себя связанным тем обстоятельством что он должен использовать каждый элемент языка в каждом проекте.
Да этот Страуструп поехавший маньяк! А те программист, о которых он говорит - мазохисты.

21 апр, 14:25 326 1177714

>>1177474
Уже нашел документацию по встроенным в Qt тестам.
Как можно улучшить проект? >>1177427
Что с ним не так?

21 апр, 16:00 327 1177754

>>1177701
Осиль уже Ncurses педрила

21 апр, 16:02 328 1177757

>>1177613
>X10
Да и 11 такая-же говнина слава боженьке перешли на wayland, не прошло и три десятка лет бляд

Ответы77953

21 апр, 22:30 329 1177953

>>1177757
В /s/, довун.

21 апр, 22:31 330 1177954

>>1177317
>Как уже выше говорили, std::move сам по себе ничего не перемещает
Спасбо, Капитан К.О.
Я просто демонстрировал, что можно вызывать с массивами.

125 Кб, 720x366
21 апр, 22:48 331 1177961

Аноны, объясните как работают токены? Вкатываюсь, читаю, все понятно, пока не увидел эту таблицу, эту вонючую таблицу, что за хуйня?

Ответы7796578633

21 апр, 22:52 332 1177965

>>1177961
'8', я так понимаю, это «код» токена для (целых) чисел?

Ответы77967

21 апр, 22:55 333 1177967

>>1177965
Да, value

Ответы77968

21 апр, 22:56 334 1177968

>>1177967
value это 11 и 12, а '8' (или что там написано?) это kind

Ответы77970

21 апр, 23:01 335 1177970

>>1177968
Почему kind для разных value одинаковый?

Ответы77971

21 апр, 23:01 336 1177971

>>1177970
Потому что это токены одного kind'а

Ответы77972

21 апр, 23:04 337 1177972

>>1177971
И как компилятор различает их, если они записываются оба как '8'?

Ответы7797378153

21 апр, 23:05 338 1177973

>>1177972
А зачем их различать?

Ответы77975

21 апр, 23:07 339 1177975

>>1177973
Чтобы посчитать

Ответы77976

21 апр, 23:08 340 1177976

>>1177975
Как-то так
std::count_if(begin(tok), end(tok), [](const auto& t) { return t.kind == '8'; });

22 апр, 02:23 341 1178096

>>1177024
Нет никаких аналогий для того, чтобы описать очередной шизофазийный бред Комитета.
Читай. Только нормальное читай, критическое, а не восторженные вопли крестоблядей, которым всё божья роса. Про rvalue и std::move рекомендую почитать вот это: http://ericlengyel.blogspot.nl/2017/11/some-thoughts-about-rvalue-references.html

Ответы781037811078111

22 апр, 02:35 342 1178103

>>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.

Бля, прям бальзам на душу. Хоть где-то знают, что в выражениях нет ссылок.

Ответы7811078111

22 апр, 02:50 343 1178110

>>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 и их кумирам, пишущим бредятину в бложик — бурные, долго не смолкающие аплодисменты, переходящие в овацию.

22 апр, 02:50 343 1178110

>>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 и их кумирам, пишущим бредятину в бложик — бурные, долго не смолкающие аплодисменты, переходящие в овацию.

Показать весь текст
Ответы7811178119

22 апр, 02:50 344 1178111

>>1178110
>Долбоёбам типа >>1178103
Ну бля)))
Конечно же, типа >>1178096

22 апр, 04:03 345 1178119

>>1178110
> std::dont_move
Таки да. Что мне не нравится в этой идее, что может произойти UB есть в определение функции добавить transient и не пройтись по всем её вызовам. Ведь конпелятор C++ не следит за временем жизни переменных и (скорее всего) ничего не пискнет если объект будет передаваться два раза (хотя м.б. статические анализаторы помогут в этом случае). Правильней было бы указывать transient как в определении функции, так и при вызове (так например сделана передача примитивов по ссылке в C#: ключевое слово ref нужно указывать везде). Правда тогда это почти ничем не будет отличаться от &&-ссылок и std::move.

Ответы78120

22 апр, 04:07 346 1178120

>>1178119
> и не пройтись по всем её вызовам
И что ещё хуже из-за шаблонов с утиной типизацией в C++ практически нереально сделать нормальный поиск вызовов функций: только по совпадению названия.

22 апр, 04:13 347 1178121

>>1177575
> Вот зачем было убирать?
Его никто не убирал. C++ и C развиваются независимо, просто в С эта фича была добавлена позже. Кстати, в C++20 её тоже хотят добавить.

22 апр, 11:31 348 1178153

>>1177972
Компилятору похер. Преобразование какого-либо символа из потока cin в определенный токен осуществляется в функции get_token() (читай дальше, как она устроена внутри). Далее уже работаем не с отдельными символами типа '(', '3', '+' и т.д., а с токенами. Да, эти главы с калькулятором в Страуструпе довольны сложны для понимания вкатывальщику (я сам такой, много я затратил времени, чтобы разобраться).

22 апр, 12:16 349 1178163

Вот есть у меня какая-то программа на cpp. Можно ли как-то поднять сайт, который будет вместо движка использовать эту программу, причем сервер поднят на каком-нибудь левом языке.

Ответы7816578184

22 апр, 12:24 350 1178165

>>1178163
Можно, чому нет? Делаешь на плюсах rest-сервер (либо вебсокетный сервер, но это чуть сложнее) и жс сможет напрямую подключаться к нему.

22 апр, 13:01 351 1178178

Объясните позязя почему в других языках можно инициализировать статическую переменную в классе и придать ей значение там же, а в c++ низя?

Ответы781827818378186

22 апр, 13:10 352 1178182

>>1178178
> а в c++ низя?
Начиная с C++17 можно. Гугли inline variables. Впрочем можно было и раньше, просто более геморно.

22 апр, 13:13 353 1178183

>>1178178
Вот так можно
static const int a = 5;

Ответы78185

22 апр, 13:16 354 1178184

>>1178163
http://lectureswww.readthedocs.io/5.web.server/cgi.html

22 апр, 13:20 355 1178185

>>1178183
Это будет работать только с примитивными константами. Для всего остального (начиная с C++17) можно писать
static inline const int a = 5;
или
static inline int a = 5;

22 апр, 13:21 356 1178186

>>1178178
Потому что нет никакого класса, есть только его объявление.

Ответы78188

22 апр, 13:32 357 1178188

>>1178186
Ты дурак? Можно вообще писать без cpp-файлов, а с шаблонами по-другому и не выйдет. Вся эта хуета со статическими переменными нужна из-за особенности работы линковщика. Раньше приходилось выёбываться с шаблонами. Сейчас можно делать встраиваемые переменные.

22 апр, 13:57 358 1178195

69 Кб, 748x110234 Кб, 495x47528 Кб, 626x47019 Кб, 622x392

Анон, я тут что-то впёрся.
Хочу сделать запрет на создание второго экземпляра приложения и передачу из него аргументов командной строки перед его уничтожением.
Сначала пытался реализовать блокировку 2+ приложения, при помощи QSharedMemory, но у меня не создавался второй, четвёртый, шестой, ...., но создавались третий, пятый, седьмой, ...
Я забил на это и оставив QSharedMemory для передачи аргументов командной строки, сделал блокировку 2+ приложений при помощи виндомьютексов.
Теперь приложения блокируются норм, но аргументы передаются только из второго вызова приложения. 3+ вызовы не передают аргументов.

Насколько я понимаю, у меня на каком-то этапе происходит что-то нехорошее с QSharedMemory, но я не могу понять где.

1 пик - код конструктора основного класса программы.
2 пик - код загрузки данных в QSharedMemory
3 пик - код получения данных из QSharedMemory
4 пик - вывод, обозначены сторонние попытки запуска приложения. 1 - 2 приложение, пересылающее аргументы нормально. 2 - 3 приложение - не пересылающее аргументы.

Ответы7820278206

22 апр, 14:08 359 1178202

>>1178195
Что мешает использовать элементарные сокеты? Ими можно и наличие запущенной программы проверять и данные отправлять.

Ответы78204

22 апр, 14:12 360 1178204

>>1178202
>Что мешает использовать элементарные сокеты? Ими можно и наличие запущенной программы проверять и данные отправлять.
В целом ничего, за исключением того что первые нагугленные варианты были - QSharedMemory и системный мьютекс+сообщение. Ну и интересно, что у меня не работает.

Ответы78206

22 апр, 14:27 361 1178206

>>1178204
>>1178195
Всё ок. Переборщил с QSharedMemory::detach()

42 Кб, 359x480
23 апр, 11:31 362 1178220

Я нихуйа не понял
Ананасы, ткните носом. Все форумы облазил, остался двач.

Есть базовый класс и 9000 наследников, в каждом переопределяются несколько виртуальных методов. Хочу, чтобы по выбору юзверя о'бект вызывал их из определённого наследника.

Пробовал так:
Обьявил указатель на об'ект базового класса;
Свитч, каждом кейсе пишу objectname = new childClass, где childClass меняется.

Об'ект вызывает метод из базового класса.
Как добавить мозгу в голову?

Ответы78431

23 апр, 14:57 363 1178243

>>1173318
Я нуфаня, но для статических массивов переменная size должна быть const size вроде же, не?

Ответы7825278653

23 апр, 15:31 364 1178252

>>1178243
а может (unsigned int)size?

493 Кб, 500x720
23 апр, 17:42 365 1178304

Для программирования звука насколько актуально с++ осваивать?
Смотрю проприетарный софт всякий вроде pianoteq на нём написан.
Секвенсоры тоже на крестах пишут? А всякие сорта синтезаторов?

Ответы7831878434

23 апр, 18:22 366 1178318

>>1178304
По моему вообще весь около-звук пишется на крестах, т.к. ты не можешь себе позволить, пока ДЖАВУШКА ПАРУ МИНУТ ПАМЯТЬ ПОЧИСТИТ

Ответы78439

23 апр, 18:34 367 1178326

>>1169708 (OP)
Аноны, help. Занимаюсь по учебнику Страуструпа "Программирование принципы и практика", дошел до 12 главы, пытаюсь установить библиотеку FLTK. Скачал её с сайта Страуструпа, по инструкции в приложении открыл проект, нажал построить.
Вот что выдает:
Не удается открыть файл включение: stdio.h: No such file or directory
Это сообщение повторяется много раз. До этого жаловался на отсутствие SDK 8.1, я его установил.

Ответы783327836578552

23 апр, 18:44 368 1178332

>>1178326
У страуструпа не учебник, а референс. Вернись к нему через год, а пока читай Стивена Прату

Ответы78333

23 апр, 18:45 369 1178333

>>1178332
Вопрос был не о том. И это не первая моя книга о C++

Ответы78357

23 апр, 19:31 370 1178357

>>1178333
ну раз ты такой умный - ебись сам

23 апр, 19:43 371 1178365

>>1178326
Скачай лучше свежую версию с оф. сайта fltk.

Ответы78368

23 апр, 19:48 372 1178368

>>1178365
Её тоже скачивал. Та же проблема.

Ответы78370

23 апр, 19:52 373 1178370

>>1178368
Тогда выкинь свой говнокомпилятор на помойку и скачай нормальный: последнюю студию или mingw64 7.2.0 - 7.3.0 и собирай cmake'ом (сам так делал неделю назад, все собралось норм).

Ответы78376

23 апр, 20:07 374 1178376

>>1178370
Как-то не могу разобраться как с помощью Cmake(раньше никогда ей не пользовался) собрать в VS.

Ответы78389

23 апр, 20:30 375 1178389

>>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 лежат необходимые файлы.

Ответы78406

23 апр, 20:54 376 1178406

>>1178389
Спасибо, собрал.

23 апр, 21:23 377 1178425

>>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.obj
1>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.obj
1>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: неразрешенных внешних элементов: 8
1>Сборка проекта "1.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

23 апр, 21:23 377 1178425

>>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.obj
1>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.obj
1>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: неразрешенных внешних элементов: 8
1>Сборка проекта "1.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Показать весь текст
Ответы78477

23 апр, 21:36 378 1178431

>>1178220
Проверь именно переопределение с помощью override. Может ты скрываешь из-за разной сигнатуры. Override покажет это

Ответы78559

23 апр, 21:40 379 1178434

>>1178304
Гугли intel IPP. Либа для ЦОС

Ответы78439

23 апр, 21:47 380 1178439

>>1178318
>>1178434
Спасибки.

23 апр, 22:59 381 1178477

>>1178425
>comct132.lib
держи в буффер обмена с вертушки: COMCTL32.LIB
>это туда писать нельзя
чекбокс Игнорировать все стандартные библиотеки отмечен?
>уже определен в Graph.obj
попроб пересобери начисто

Ответы78626

24 апр, 00:43 382 1178552

>>1178326
apt-get install

120 Кб, 960x1280
24 апр, 01:11 383 1178559

>>1178431
Ага, починил, аригото. Теперь следующий лвл хз как такое искать:

Есть отдельный класс jopa с кучей полей - об'ектов дочерних классов от того базового. Пытаюсь заполнять их через jopa-метод add(className objectName), где className - имя одного из наследников, а имён этих 9000.
При отправке в любую функцию об'екта любого производного класса, определённого как в прошлом посте, он воспринимается как об'ект базового. Нахуячил 9000 одинаковых функций с разными типами, add от базового класса запилил как virtual но при попытке скопировать под'ехавшый об'ект в нужное поле jopa всё равно получаю от компилятора по ебалу.

Как вырезать лишнюю хромосому?

Ответы7856678612

24 апр, 01:48 384 1178566

>>1178559

> Есть отдельный класс jopa с кучей полей - об'ектов дочерних классов от того базового. Пытаюсь заполнять их через jopa-метод add(className objectName), где className - имя одного из наследников, а имён этих 9000.
add(className #objectName);
Где # указатель. Макаба звездочки сжирает.

> При отправке в любую функцию об'екта любого производного класса, определённого как в прошлом посте, он воспринимается как об'ект базового.
Когда ты передаешь в объект метод с помощью копирования - копируется только базовая часть класса. Через указатель нет. Ну и соответственно поля должны быть указателями, а не агрегируемыми объектами.

> Как вырезать лишнюю хромосому?
Читать книжки блядь, там всё написано

24 апр, 06:13 385 1178612

>>1178559
> Нахуячил 9000 одинаковых функций с разными типами, add от базового класса запилил как virtual но при попытке скопировать под'ехавшый об'ект в нужное поле jopa всё равно получаю от компилятора по ебалу.
По-моему тут нужны ШАБЛОНЫ.

24 апр, 07:48 386 1178626

>>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.obj
1>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.obj
1>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: неразрешенных внешних элементов: 8
1>Сборка проекта "1.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

24 апр, 07:48 386 1178626

>>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.obj
1>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.obj
1>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: неразрешенных внешних элементов: 8
1>Сборка проекта "1.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Показать весь текст

24 апр, 08:38 387 1178633

>>1177961
В чем проблема? У тебя есть токен это один элемент твоей грамматики. Хуячишь виды токенов в енум, при парсинге распознаешь тип. Твои символы это то, что ты увидишь в отладчике если напишешь следующий енум.
enum TokenKind {NUMBER='8', MUL='.', DIV='/'}
Это ведь страуструповский калькулятор, не так ли?

24 апр, 09:55 388 1178653

>>1178243
Выше уже всё объяснили.
По стандарту C++ должна быть константой, чтобы размер был известен на стадии компиляции.
Однако, такая фишка variable length array допустима начиная с довольно древнего стандарта си, а в C++ её поддерживают некоторые компиляторы например g++.

Ответы78655786807879178941

24 апр, 09:59 389 1178655

>>1178653
Забавно, но так или иначе я получается был прав, но не полностью.

24 апр, 11:23 390 1178680

>>1178653
>такая фишка variable length array
Ну и говнина.
Просирают плюсы с каждым годом.

Ответы79135

24 апр, 13:49 391 1178772

Посоветуйте что почитать по авторизации и аутентификации на крестах на примере какой-нибудь библиотеки. Жедательно какую-нибудь книжку по-подробнее, а не API мануал.

24 апр, 14:24 392 1178788

Здравия. Собрал библиотеку 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.obj
1>C:\Users\nail1\source\repos\FLTK_TEST\Debug\FLTK_TEST.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>Сборка проекта "FLTK_TEST.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

24 апр, 14:28 393 1178791

>>1173348
>>1178653
http://cpp.sh/4fkea
Странно как-то рабоает. Если слева внизу в опциях выбрать C++11, то выдает 20 байтов, а на C++14 выдает 1 байт. Что за хуйня? А на моем майкрософтском C++17 вообще ошибку выдает. Без const не идет.

19 Кб, 490x381
24 апр, 14:30 394 1178792

Читаю Липмана пока, всё норм, но мне бы норм мануал как программа по фалам должна быть раскидана, то ли я ещё не дочитал до той части где это рассматривается толи вовсе нет этого в книге.
Я прост не догоняю как всеми этими хедерсами крутить. С какого файла начинается сборка и так далее. Какая часть компилятора этим занимается?
Можно в двух словах как эта хуета работает.

Ответы787967882779131

24 апр, 14:34 395 1178796

>>1178792
Я всё в хэдэры кидаю и cpp-файлы почти не использую. Правда у куча шаблонов, а там по-другому никак.

24 апр, 14:37 396 1178797

Поясните, как найти интерес прочитать хоть одну книгу по c++

Ответы7881078811

24 апр, 15:08 397 1178810

>>1178797 если у тебя такие вопросы то иди на хуй. Программирование не для тебя.

Ответы79155

24 апр, 15:09 398 1178811

>>1178797
пили проекты

Ответы79155

Малыш !Freja46eZM 24 апр, 15:39 399 1178827

>>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_ptr
class Foo;
class SomeClass {
using Foo_ptr = std::shared_ptr<Foo>; // когда западло каждый раз писать
Foo_ptr m_foo;
}
В последних двух случаях foo.h придется включать в some_class.cpp.
Алсо если класс очень большой много разного функционала, то можно оставить один хедер, а .cpp файл разбить на несколько, в которых будут определения различных функций класса.

Малыш !Freja46eZM 24 апр, 15:39 399 1178827

>>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_ptr
class Foo;
class SomeClass {
using Foo_ptr = std::shared_ptr<Foo>; // когда западло каждый раз писать
Foo_ptr m_foo;
}
В последних двух случаях foo.h придется включать в some_class.cpp.
Алсо если класс очень большой много разного функционала, то можно оставить один хедер, а .cpp файл разбить на несколько, в которых будут определения различных функций класса.

Показать весь текст
Ответы78966

24 апр, 15:41 400 1178829

>>11787
Хедер - определение
Cpp файл - реализация.
Вот ты зачем функции используешь? Для разбиения программы на логические единицы так? А в файлах можно объединять функции.
А как собиратемя это все. Сначала все хедер фалы копируются в файл. Это делается с помощью #include. Это делает препроцессор - часть компилятора. Вообще все что начинается с # делает препроцессор. В хедерах определения так? после компиляции программа ,называемая редактором связей, ищет определения объявленных функций. И связывает объявления с определением.

24 апр, 18:40 401 1178941

>>1178653
>Однако, такая фишка variable length array допустима начиная с довольно древнего стандарта си
А с менее древнего (C11) допустимо её не поддерживать. Бгг.

24 апр, 19:25 402 1178966

>>1178827
Кстати, вот я задавал вопрос по этому поводу выше (или в прошлом треде, не помню).
Почему нельзя сделать один хэдэр с неймспейсом, в котором все объявления, а там уже для каждого класса свой срр файл?
Потому что в каждый срр с инклюдом будет опять поставляться этот файл с неймспейсом? Или из-за большой загруженности одного хэдэра?

Ответы79004

52 Кб, 540x477
24 апр, 19:35 403 1178970

Памагите послезавтра собес на Джуна.
Может у кого-нибудь есть ссылка на сборник каких нибудь вопросов.
Первые пару страниц Гугла я уже пролистал

Ответы789997902980061

24 апр, 20:24 404 1178999

>>1178970
> завтра собес
> спрашивает шпоры
Ты не пройдешь.

24 апр, 20:30 405 1179004

>>1178966
>Почему нельзя
Можно. Как я написал, можно даже создать хедер с объявлением одного класса, а реализовать этот класс в нескольких .cpp файлах.

>из-за большой загруженности одного хэдэра?
По большей части это. Пусть есть классы Foo1 и Foo2.
Если они никак не связаны, то смысла так делать нет. Одному .cpp может понадобится только foo1.h, какому-нибудь другому только foo2.h.
Но если Foo1 и Foo2 жить друг без друга не могут, то можно и в одном хедере объявить.

Есть такой прием рефакторинга, когда функцию с большим числом параметров заменяют на аналогичную, но которая в качестве аргумента принимает структуру. В таком случае структура не имеет смысла в отрыве от этой функции и класса, логично структуру объявить в том же файле, что и класс.

Ответы79038

24 апр, 20:56 406 1179029

>>1178970
тебя попросят перевернуть список на бумажке , ты ничего не сможешь и ты уйдешь от них еле сдерживая слезы

Ответы8182081865

24 апр, 21:01 407 1179038

>>1179004
>хедер с объявлением одного класса, а реализовать этот класс
послушай: хватит нести чушь
разберись что такое объявление и определение класса, и что такое определение методов класса
и вообще определение класса и структуры помещеается в хедеры, а стандарт разрешает множественные определения классов и структур..
объявление же класса используется для других целей, в качестве упреждающего объявления чаще всего..
я обычно молчу, но, блядь, последние посты в треде - много неверного написано

Ответы790437904979066

24 апр, 21:03 408 1179041

А вообще все эти хедеры-хуедеры - это устаревший пиздец, который слава богу уйдёт (по крайней мере в если писать проект самому) с принятием модулей в C++20. Можно будет всё хуячить в сpp файлы, а заголовки конпелятор будет создавать сам.

Ответы79101

24 апр, 21:05 409 1179043

>>1179038
сверху еще стоит разобраться с inline методов-членов класса, и что происходит если метод-член определяется внутри определения класса

24 апр, 21:11 410 1179049

>>1179038
Бля, ну извини.

Ответы79128

24 апр, 21:37 411 1179066

>>1179038
А есть такие библиотеки, которые все пихают в один хедер не используя cpp файлов.

Ответы7907179092

24 апр, 21:39 412 1179071

>>1179066
Есть. Большая часть буста, например.

24 апр, 21:53 413 1179092

>>1179066
Это самые лучшие библиотеки.

24 апр, 22:07 414 1179101

>>1179041
Вроде уже в VS 2017 можно экспериментировать с модулями.

Ответы79106

24 апр, 22:12 415 1179106

>>1179101
Ппц, аж захотелось на винду пересесть. И опять студию поставить.
Правда тогда у меня будет соблазн послать нахуй плюсы и писать на божественном шарпе.

Ответы7910879136

24 апр, 22:20 416 1179108

>>1179106
В шланге тоже есть (возможно и в гцц), не боись.

24 апр, 23:15 417 1179128

>>1179049
ну это был намек на то что стоит просто чутка разобраться в этом вопросе и не более

24 апр, 23:21 418 1179131

>>1178792
> С какого файла начинается сборка
Какой подашь на вход конпелятору, с того и начинается.

24 апр, 23:23 419 1179135

>>1178680
> Просирают плюсы с каждым годом
С каким годом? Эта дристня с незапамятных времен есть.

24 апр, 23:24 420 1179136

>>1179106
А сейчас на чем ты сидишь и на каком языке?

25 апр, 00:00 421 1179155

>>1178810
Согласен. Как исправиться?
>>1178811
Хочу игру запилить, а без основ нихуя не выходит, а основы лень прочитать

25 апр, 00:15 422 1179161

Не могу точно понять, что это выражение делает, только одна строка.
(*bobo->progressProc)(varA, varB);
Это как бы указатель на функцию? А нельзя было просто сделать так?
bobo->progressProc(varA, varB);

Ответы79354

25 апр, 13:38 423 1179353

>Хочу игру запилить, а без основ нихуя не выходит, а основы лень прочитать
>основы лень прочитать
Как бэ тебе объяснить. ЯП это как научится писать, буквы там всякие, запятые, потом слова из них составлять, предложения. А сам софт это уже другой уровень, ты не сможешь написать поэму не зная букв.
В рисовании тоже кстати так. Не задрочив кубы сиську не нарисуешь.
Алсо, это тебе сейчас так кажется что основы это хуйня и ты как бэ их уже в принципе знаешь, но с крестами так не прокатит. Есть множество нюансов, все они вытекают из общей логики языка. Читай Липмана из списка литературы. У него хороший подход, с прочтением появляется понимание общей структуры замысла крестов, но книга бедна на примеры и всю дорогу мы делаем какую то неинтересную бухгалтерскую хуету, для библиотеки.
Кресты нужны для байтоёбства, для жонглирования данными в памяти для задач реального времени для реальной жизни.

25 апр, 13:43 424 1179354

>>1179161
>(bobo->progressProc)(varA, varB);
хм, если тут таким образом вызывается метод, может тогда дело в том что bobo - это указатель на указатель.
может так переписать
*bobo.progressProc(VarA, VarB);

Ответы79356

25 апр, 13:44 425 1179356

>>1179354
макаба сожрала звезду в последней строке, их там две

25 апр, 14:25 426 1179382

что возвращает эта функция

[CODE]inline class IMemStreamMgr GetMemStreamMgr( ) {
return (IMemStreamMgr)GetCOREInterface( MEMSTREAMMGR_INTERFACE );
}[/CODE]

как функция может возвращать класс? не объект класса, а класс. я не понял

Ответы7938679558

25 апр, 14:32 427 1179386

>>1179382
Что-то мне подсказывает, что либо это не C++, либо где-то ранее стоит что-то уровня

#define class

Ответы7947479559

25 апр, 14:38 428 1179388

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.obj
1>C:\Users\nail1\source\repos\FLTK_TEST\Debug\FLTK_TEST.exe : fatal error LNK1169: one or more multiply defined symbols found
1>Done building project "FLTK_TEST.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ответы7939779599

61 Кб, 1055x657
25 апр, 14:54 429 1179397

>>1179388
>не компилируется
false

Ответы7940079402

25 апр, 14:57 430 1179400

>>1179397
А мне то что делать? Создаю пустой проект, прописываю библиотеки. Выдает вот это. Собирал на VS2017 в релизе.

Ответы79401

25 апр, 14:58 431 1179401

>>1179400
Собирал библиотеку*

25 апр, 14:58 432 1179402

>>1179397
>прописываю библиотеки
с этого момента подробнее

Ответы79404

25 апр, 15:00 433 1179404

>>1179402
fltkd.lib
wsock32.lib
comctl32.lib
fltkjpegd.lib
fltkimagesd.lib
В игнор:
libcd.lib

Ответы79405

25 апр, 15:04 434 1179405

>>1179404
если конфиг дебажный, то
>fltkd.lib
если релиз, то
>fltk.lib
остальное хелловорлду нинужно
ну и таргет как Win32 GUI Application определи

Ответы7940679408

25 апр, 15:06 435 1179406

>>1179405
>ну и таргет как Win32 GUI Application определи
А как это сделать?

Ответы79419

25 апр, 15:08 436 1179408

>>1179405
>остальное хелловорлду нинужно
Включаемые библиотеки взял с учебника

Ответы79411

25 апр, 15:15 437 1179411

>>1179408
ээ, яхз сейчас чо там у VS2017 за свитчи, но вместо CONSOLE выход должен быть WINDOWS, если у тебя ошибка WinMain16@ вроде
ну и сам подумой, зойчем пустой гуёвине сокеты?
>wsock32.lib

Ответы79418

25 апр, 15:33 438 1179418

>>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.obj
1>C:\Users\nail1\source\repos\Project3\Debug\Project3.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>Сборка проекта "Project3.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Ответы79420

25 апр, 15:35 439 1179419

>>1179406
Погугли, ёпта. У тебя в дебрях свойств проекта переключается эта херня на subsystem:windows.

Ответы7942179432

25 апр, 15:38 440 1179420

>>1179418
похоже, что к проекту подключена не только fltkd.lib
выпиливай конфликтующие либы

Ответы79422

25 апр, 15:38 441 1179421

>>1179419
Гуглил. Уже 3 день с этим сижу.

Ответы79423

25 апр, 15:39 442 1179422

>>1179420
С випилом также.

Ответы79431

25 апр, 15:39 443 1179423

>>1179421
Тогда ебать ты даун. Попробуй отдохнуть и на денек забить на это.

Ответы79424

25 апр, 15:40 444 1179424

>>1179423
Забивал уже. Вчера ничерта не делал.

25 апр, 15:48 445 1179431

>>1179422
значит запрети использование стандартных библиотек

Ответы79433

25 апр, 15:48 446 1179432

>>1179419
Нашел этот переключатель пробовал и console и windows. Ничего не меняется

25 апр, 15:49 447 1179433

>>1179431
Запретил библиотеку libcd.lib

Ответы79439

25 апр, 16:00 448 1179439

>>1179433
надеюсь, ты каждый раз пересобираешь начисто, а не оставляешь старые *.obj

Ответы79442

25 апр, 16:07 449 1179442

>>1179439
Попробовал пересобирать. Ничего не изменилось.

Ответы79448

25 апр, 16:25 450 1179448

>>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 и все собралось с первого раза
простыню выше по использованию студии не читал, хотя там вроде и не троллинг

Ответы79453

25 апр, 16:33 451 1179453

>>1179448
>лично я тупо сделал apt install libfltk-dev
Где? В консоли?
>добавил ключ -lfltk
И это где?

Ответы79456

25 апр, 16:38 452 1179456

>>1179453
>apt
да забей, это не виндовс
>-lfltk
а это в C::B флаг линковщика

25 апр, 17:07 453 1179474

>>1179386
не, нету дефайна
это с++ и оно даже компилируется
возможно это как-то влияет на перегрузку функции

25 апр, 19:25 454 1179558

>>1179382
Функция возвращает указатель на IMemStreamMgr. А IMemStreamMgr — это class.

Ньюфаги не знают, что такое elaborated type specifier? Пора вернуться в закреплённый тред!

Ответы7956880058

25 апр, 19:26 455 1179559

>>1179386
>Что-то мне подсказывает, что либо это не C++, либо где-то ранее стоит что-то уровня
Что-то мне подсказывает, что ты рано вылез из ньюфаг-треда.

25 апр, 19:36 456 1179568

>>1179558
> elaborated type specifier
Никогда этой хуйнёй не пользовался. Очередная "фича" C++ для большего запутывания кода.

Ответы79571

25 апр, 19:44 457 1179571

>>1179568
>Никогда этой хуйнёй не пользовался.
Как и хуйнёй под названием "мозги".

Ответы79580

25 апр, 19:48 458 1179580

>>1179571
А зачем он нужен кроме как краткой записи предварительного объявления? Все эти объявления я делаю в начале файла сразу после инклудов, а с модулями и они станут не нужны. Все остальные юзкейсы при совпадение имён переменных и классов просто курам на смех.

Ответы79582

25 апр, 19:48 459 1179581

Что такое Clang? Это какой-то компайлер для виртуальной машины?

25 апр, 19:49 460 1179582

>>1179580
>А зачем он нужен кроме как краткой записи предварительного объявления?
Может для мифической совместимости с C, где надо писать struct перед тэгом структуры?

25 апр, 20:07 461 1179599

146 Кб, 1920x108036 Кб, 991x59731 Кб, 1142x71737 Кб, 1741x717

>>1179388
Ладно, помогу тебе, бедняга.
1) Создаешь на любом диске (далее у меня будет диск С) папку с любым названием (FLTK например). Далее в нее кидаешь папки FL и lib из папки собранной библиотеки. В папке FL должно быть много всяких .h файлов (у меня 144), а в папке lib 7 .lib файлов.
2) В студии создаешь пустой проект. Создаешь .cpp файл и заходишь в настройки проекта (Alt+F7). B далее смотри пик 2-4.

29 Кб, 978x367
26 апр, 09:02 462 1179857

Да ёб твою мать! Что за хуйня то?
Скачал исходники FTLK с оффсайта, собираю под Шин10 через msys, а оно блядь каждый раз выдаёт куче предупреждений и посылает на хуй на этапе с линковкой. Делол так:
./config
make
При чём блядь, версия 1,3,4-1 и -2 просто на этапе компиляции ошибку находила и пиздос. версия 1,3,3 доползла до линковки и пиздец.
ЧТО ЗА ХУЙНЯ?! Или это такое мягкое приглашение в мир свободного ПО?

Ответы79865

26 апр, 09:37 463 1179865

>>1179857
>под Шин10 через msys
А мог бы включить WSL и поставить там через apt-get.

29 Кб, 1271x299
26 апр, 12:08 464 1179918

>>1169708 (OP)
Ребята нужна помощь, каким образом выполнить задание снизу?
Вот мой код для ввода и вывода булева вектора:https://pastebin.com/HAbky92W

Ответы79964

26 апр, 12:14 465 1179922

Господа, я дебил. Есть вектор shared_ptr и я пытаюсь найти минимальное значение.
Сделал так hastebin.com/tikayoriku.cpp, но по итератору я сразу получаю сам класс, на который указывает shared_ptr, мне же нужен сам ptr.
ЧЯДНТ??

Ответы79953

26 апр, 12:53 466 1179953

>>1179922
Поставь звёздочку перед std::min_element.
https://ideone.com/hqL2fk

26 апр, 12:58 467 1179964

>>1179918
Не используя <vector>, а только лог.операции + сдвиги.

26 апр, 15:19 468 1180058

>>1179558
всё мне ясно стало теперь
спасибо

26 апр, 15:21 469 1180061

>>1178970
А что вы делаеце на моей галере?! Вы хатице работац?

26 апр, 20:19 470 1180247

Анен, посоветуй чтонить про вин32апи?

Ответы802668026980342

26 апр, 20:59 471 1180266

>>1180247

Windows via C/C++ (Jeffrey RIchter)

Ответы80267

26 апр, 20:59 472 1180267

>>1180266
хосспаде, как же спасибо тебе

26 апр, 21:01 473 1180269

>>1180247
> 2k18
> WinAPI

Ответы803428064080673

26 апр, 23:04 474 1180342

>>1180269
Почему бы и нет? Может ему нужно. Windows-то до сих пор на Win32 API работает.

>>1180247
Я в начале нулевых вот по этой книге изучал, и судя по отзывам на амазоне, эта книга до сих пор актуальна https://www.amazon.com/Programming-Windows®-Fifth-Developer-Reference/dp/157231995X/

А если хочешь по-быстрому стартануть, то советую тебе вот этот замечательный краткий туториал
http://www.winprog.org/tutorial/start.html

26 апр, 23:28 475 1180357

Я увидел в коде вот такой цикл
for (int i = 32; i--;)
Это вообще хороший стиль, или у него есть какие-нибудь косяки?

Ответы803588036480377

26 апр, 23:41 476 1180358

>>1180357
Бля, ну вообще забавно. Ни разу такой хуйни не видел.
Не совсем очевидно, до скольки i опустится. Даже лень думать.

Ответы8035980360

26 апр, 23:48 477 1180359

>>1180358
>Не совсем очевидно, до скольки i опустится
Ахуеть.
Что ты забыл в программировании?

Ответы80361

26 апр, 23:49 478 1180360

>>1180358
Проследил через дебаггер, когда i доходит до нуля, цикл заканчивается. Ведь второй параметр в for цикле, это как условие if. Если i не false или не ноль, то цикл продолжается.

26 апр, 23:51 479 1180361

>>1180359
Ну бля, я прост бухой в говнину.
Да и вообще хуй знает, когда там условие внутри for проверится, до или после декремента. В любом случае это говнокод, если сразу непонятно, но интересно.

Ответы80365

26 апр, 23:55 480 1180364

>>1180357
Хороший стиль для "беззнаковых" при итерации в обратном порядке.
for (size_t i = N; i --> 0; )

`--> 0` называется «оператор "стремится к нулю"»

Ответы80368

26 апр, 23:55 481 1180365

>>1180361
>Да и вообще хуй знает, когда там условие внутри for проверится, до или после декремента.
Вернись в ньюфаг-тред.

Ответы80372

27 апр, 00:03 482 1180368

>>1180364
> `--> 0` называется «оператор "стремится к нулю"»
Это называется пиздежь. На самом деле компайлер это читает как i-- > 0, в итоге получается то же самое как и просто i--;

Ответы80371

27 апр, 00:12 483 1180371

>>1180368
>> `--> 0` называется «оператор "стремится к нулю"»
>Это называется пиздежь.
Прямо-таки разоблачение века.

Малыш !Freja46eZM 27 апр, 00:20 484 1180372

>>1180365
Соси жопу, это вообще ненужные знания нахуй, зачем мне в каком то говнокоде разбираться в срачах уровня "чему равно ++(i++)++", или как там.

Ну бля я могу предположить, что for вычисляет выражения, а значит сначала сделает декремент. Но бля, тут второй вопрос возникает. Получается первое значение i в цикле будет 31?

Короче идите нахуй, я спать.

Ответы8037380374

27 апр, 00:27 485 1180373

>>1180372
Даже js-макаки не позволят себе такой неграмотности, пиздец.

27 апр, 00:32 486 1180374

>>1180372
При первой проверки выражения i имеет значение 32, так как это постфиксный декремент, а внутри цикла уже 31.

27 апр, 00:37 487 1180377

>>1180357
Щас проверил, это даже в js работает.

27 апр, 03:24 488 1180405

Почему это не работает? Указатель 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();

Ответы8040680408

27 апр, 03:26 489 1180406

>>1180405
Блять ебучий двач звездочки возле char проглатил.

27 апр, 04:26 490 1180408

>>1180405
>Почему это не работает?
Потому что возвращаемая из substr строка уничтожается по окончании вычисления выражения.

Ответы80488

27 апр, 13:27 491 1180488

>>1180408
Хм это опять какой-то нюанс С++? Это из-за rvalue или? Другого более удобного варианта нет?

Ответы8080280973

27 апр, 16:03 492 1180544

>>1169708 (OP)
Что лучше: определять функции в хедере с телами как inline или разделять их на файл объявлений и файл определений?

Ответы80565

27 апр, 17:06 493 1180565

>>1180544
Разделять, потому что если изменишь объявление в хедере, то буут перекомпилироваться все файлы включающие данный хедер. Гугли паттерн pimpl/мост

27 апр, 20:21 494 1180640

>>1180269
А что собственно с 1998 поменялось в сфере где используется выньопи?

Ответы8065380655

27 апр, 20:42 495 1180653

>>1180640
Никто больше не использует голое winapi, как это было 1998.

Ответы8065580657

27 апр, 21:00 496 1180655

>>1180640
>>1180653
В 1998 никто не использовал голое винапи, уже с 92 го был мфц. А сейчас и мфц нужен считай только для легаси.

Ответы80656

27 апр, 21:04 497 1180656

>>1180655
Использовали, еще как.

27 апр, 21:05 498 1180657

>>1180653
Кто "никто"? Люди которые писали системный софт на винапи, точно так же пишут его на винапи, максимум со своими обертками. Программач, ты заебал смотреть на всё с позиции формошлепства.

27 апр, 21:47 499 1180673

>>1180269
А как нужно правильно делать?

27 апр, 23:09 500 1180802

>>1180488
>Хм это опять какой-то нюанс С++?
Для тебя сюрприз, что временные объекты уничтожаются по окончании вычисления выражения?

> Это из-за rvalue или?
Не знаю, что ты понимаешь под "из-за", но если тебе будет легче, то
tanga.substr(2, 3)
это prvalue (которое превращается в xvalue для вызова метода)
и
tanga.substr(2, 3).c_str()
тоже prvalue.

Ответы80816

27 апр, 23:16 501 1180816

>>1180802
Да, для меня сюрприз, потому что я только изучаю. Значит метод чейнинг в С++ не работает? Ты мне не ответил, есть ли удобный выход в такой ситуации или мне нужно создавать дополнительный стринг объект?

Ответы80881

28 апр, 00:26 502 1180881

>>1180816
>Значит метод чейнинг в С++ не работает?
Почему, работает. Объекты вполне живы во время этих вызовов.
Ты сохраняешь внутренности объектов, которые уничтожаются после вычисления выражения.

> Ты мне не ответил, есть ли удобный выход в такой ситуации или мне нужно создавать дополнительный стринг объект?
Да, надо вводить переменную.

28 апр, 07:46 503 1180936

Анон, есть ли способ заставить студию нормально обрабатывать комментарии типа:
//Xyi\
Xyi

Если определения метода комментировать таким образом, то при наведении курсора на любое использование метода в коде комментарий не отображается.

28 апр, 11:08 504 1180973

>>1180488
Насколько я понимаю ты делаешь указатель на ничто, т.к при выходе за область видимости временные переменные созданные внутри функции уничтожаются. Допустим попробуй обратиться к переменной из функции в main, не сможешь же, ибо для main этой переменной не существует, она существует только в рамках функции, в её области видимости, тебе нужно сделать отдельную локальную переменную в main, сохранить в неё то что ты получаешь из функции и работать уже с ней, иначе будешь получать мусор до бесконечности.

Может я скажу что-то очевидное, но для того чтобы передать в функцию конкретную переменную, а не просто скопировать её значение в новые переменные, которые создаст функция, тебе нужно юзать ссылки или указатели.

мимо нюфаня не бейте сильно если что-то не так сказал

Ответы81103

28 апр, 13:37 505 1181013

Спросил в закрепе, но спрошу и тут.
Анон, пишу параллельные DFS и BFS алгоритмы на крестах с OpenMP.
Главный вопрос - КАК?
В DFS я пришёл к такому варианту: до определенной глубинымоего ануса дерева я фигачу обычный BFS, как выхлоп получаю - кучу нод. Потом я подрубаю OMP и на каждую из этих нод запускается DFS. Получается, что я одновременно исследую несколько под-деревьев. Как только нахожу нужный мне результат, делаю cancel и живу счастливо.

Но как быть с BFS?? Как с DFS не получится, ведь BFS смотрит ноды в ширину, и я не знаю как выглядит следующая глубина дерева, пока не просмотрю всю нынешнюю. Идея такова: для каждой ноды на нынешнем уровне я проверяю её потомков, если какой-то из них не является тем, что я ищу. Если среди них нет нужной мне ноды, добавляю в какой-нибудь общий вектор.

120 Кб, 1080x748
28 апр, 15:15 506 1181051

28 апр, 17:27 507 1181103

>>1180973
Что ты меня учишь балбес. Я знаю что у функций есть свой scope. В моем примере выше весь код находится внутри main и используются там только мемберные функции класса string. И второй вариант работает без проблем.

Ответы81104

28 апр, 17:30 508 1181104

>>1181103
Когда ты пишешь auto temp = tanga.substr(2, 3).c_str(); правая часть (результат substr) уничтожается сразу после присваивания, поэтому в temp остаётся мусор. А вообще если тебе так часто нужно брать части строк, лучше напиши свои строки с COW и опциональным подсчётом ссылок.

Ответы81125

28 апр, 18:08 509 1181125

>>1181104
Можешь ты (или кто-нибудь другой) дать мне пример, где конкретно в C++ метод чейнинг будет работать? Не обязательно с стрингом. Просто меня удивило это в C++, так как в других языках можешь хоть цепочку длиной десять сделать и будет норм работать, главное чтобы следующая функция была мембером типа, который возвращает предыдущая функция. А в C++ еще надо соблюдать, удалится ли это объект, если его сразу не присвоить. Я думаю, мне нужно еще хорошо разобраться с этими всякими валуеми, rvalue, prvalue, xvalue.

Ответы81129

28 апр, 18:15 510 1181129

>>1181125
> где конкретно в C++ метод чейнинг будет работать?
Тут проблема не в std::string, а в функции c_str. Она возвращает указатель на внутренности объекта, который затем уничтожается. Если бы ты работал с самим string, то всё было бы нормально.

Ответы81165

28 апр, 18:52 511 1181142

Блядь, но ведь c_str() возвращает указатель. Что и где умирает, я нихуя не понял?
Проблема, получается в объекте, который возвращает substr он-то и прекращает существовать, провоцируя созадние невалидного указателя?

Ответы8115181221

28 апр, 19:00 512 1181151

>>1181142
> Блядь, но ведь c_str() возвращает указатель.
Проблема в том, что это raw-указатель. Вот если бы это был shared_ptr с подсчётом ссылок, то объект уничтожался после уничтожения всех указателей.

Ответы8116583598

28 апр, 19:12 513 1181165

>>1181129
>>1181151
А можно этот указатель как-нибудь с помощью std::move спиздить?

Ответы81178

28 апр, 19:28 514 1181178

>>1181165
Nyet. Только скопировать каким-нибудь strcpy.

28 апр, 20:23 515 1181221

>>1181142
То с чем ты ипёшься называется висячий указатель (ссылка в c++ тоже бывает висячей в отличии от тех языков с которыми ты ранее имел дело).
https://en.wikipedia.org/wiki/Dangling_pointer
tanga.substr(2, 3) создаёт новый безымянный объект string, на который никто не ссылается извне - это временный объект (prvalue). У этого объекта ты берешь через c_str() указатель на внутренности (адрес одного из его полей в памяти) и записываешь адрес в переменную. При передаче управления в следующую строку кода временный объект умирает (ведь о нём никто не знает) и данные по адресу, который ты сохранил, становятся невалидными как часть умершего объекта.

Ответы81237

28 апр, 20:58 516 1181237

>>1181221
Тот, кому ты ответил, это не я писал, а какой-то дурачок за меня ответил. Но все равно спасибо за объяснение.

Ответы83599

53 Кб, 1460x712
28 апр, 21:27 517 1181248

Это нормально вообще? Я готов поверить, что оно не хочет автоматом приводить а/b к даблу, пусть даже с имеет тип дабл. Но почему в 3 случае скобки сломали приведение, а в 4 случае опять все работает?

Ответы8125281261

28 апр, 21:42 518 1181252

>>1181248
Всё нормально.
Пик 1
Когда ты делишь int на int получаешь округленный int.
Пик 2
Если у тебя хотя бы одна переманая с плавающей точкой (float или double), то и результат будет с плавающей точкой.
Пик 3
Переменые у тебя в скобках, значит сперва решаются они, получаешь 1, и аж потом ты делаешь каст на double.
Пик 4
Опять сперва в скобках 5 / 3 = 1, затем кастуешь в double получаешь 1.0, теперь у тебя ситуация как на втором пике, и напоследок делишь на 3, получаешь 0.333

Ответы81286

28 апр, 21:54 519 1181261

>>1181248
когда ты инты делишь - по умолчанию результат всегда инт. ему пофигу куда ты его присваиваешь. по-этому не работает 1.
2 работает потому что тут ты приводишь к даблу не результат а а! а дабл делить на не важно что - будет дабл.
соответственно в 3 ты делаешь то же самое что в 1, только явно. приводишь результат деления инта на инт (который тоже инт) к даблу. потому и не работает. дробной части там уже нет.
ну и 4 то же самое что 2. ты приводишь к даблу результат деления инта на инт, а потом этот дабл делишь не важно на что. и получаешь дабл.
как-то так.

Ответы81286

28 апр, 22:23 520 1181282

У меня баг с QGraphicsScene и QGraphicsItem.
Я переопределил в сцене mouse*Event, поэтому все ивенты должны посылаться на объекты QGraphicsItem в сцене.

Поначалу все работает, основной функционал, который реализую - "перемещение" объектов (простое изменение координат отрисовки).
Но только я "перемещаю" объект достаточно далеко от первоначального положения - он прекращает принимать ивенты и только полное пересоздание инстанса сцены помогает.

п.с. на сцене все зарисовано плиткой из картинок

28 апр, 22:30 521 1181284

>>1169708 (OP)
ОП-пост не читал (читал, на самом деле, но давно). Решаю математические задачи на плюсах полгода, нужен gui со всякими крутилками, графиками, кнопками и полями ввода. Всё эти полгода сижу на билдере (RAD Studio). Но там какая-то дичь с графиками и поэтому я задумался о переходе в другую идэе. Знаю, что в VS требуется сишарп для граф. интерфейса, а в Qt бесплатная лицензия весьма порезана (на трекерах купить не смог, так как не нашёл). В общем сейчас немного не знаю что делать. Какой из этих трёх стульев будет лучшим вариантом под мои задачи? Так же будет приятно, если можно будет строить графики в объёме прямо в окне, средствами самой среды, без OpenGL. Хотя, если выбора нет, то я готов изучить что-нибудь новое. Но всё-таки хочется остаться на плюсах.

Ответы8128781291

61 Кб, 480x480
28 апр, 22:33 522 1181286

>>1181261
>>1181252

28 апр, 22:33 523 1181287

>>1181284
Покупай Qt / ебись с wx

Ответы81290

28 апр, 22:43 524 1181290

>>1181287
Что за wx?
Я чисто ради интереса заглядывал сколькл стоит Qt. А там опять эта ебучая подписка. Я бы ещё подумал, если 30к за бессрочную лицензию, но я одиночка и не от фирмы, так что лицензия мне не светит.

Ответы81368

28 апр, 22:43 525 1181291

>>1181284
> а в Qt бесплатная лицензия весьма порезана
Если статическая линковка нинужна, то можешь спокойно использовать.

Ответы81293

28 апр, 22:50 526 1181293

>>1181291
Дык нужна. Это и подмутило воду. Не хочется каждый раз тоскать с экзешником тонны библиотек.

Ответы81294

28 апр, 22:51 527 1181294

>>1181293
> нужна.
> хочется
Так нужно или хочется? Ты уж определись.

Ответы81302

28 апр, 23:17 528 1181302

>>1181294
Это было бы намного удобнее. Удобнее настолько, что я готов не рассматривать Qt вообще. Хотя он мне очень понравился.

Ответы81303

28 апр, 23:20 529 1181303

>>1181302
Палю годноту: запаковываешь все библиотеки и само приложение в специальное приложение-запускальщик, которое всю эту фигню распаковывает во временную папку и оттуда запускает.

29 апр, 00:11 530 1181325

Какие есть 2d движки написанные на c++?

Ответы81367

29 апр, 00:24 531 1181328

Qt vs STL
http://blog.qt.io/blog/2010/06/17/how-qt-can-turn-you-into-a-guitar-maestro/

Ответы81355

29 апр, 02:11 532 1181355

>>1181328
Ты правда считаешь, что third party компонентами (хоть из QT хоть откуда) надо засрать весь проект усилив связанность его модулей, тянущих за собой избыточные либы и хедеры?

29 апр, 03:38 533 1181367

>>1181325
Напиши свой.

Ответы81448

29 апр, 03:40 534 1181368

>>1181290
>Что за wx?
wxWidgets - легковесный гуй на плюсах.

Ответы81382

29 апр, 08:48 535 1181382

>>1181368
Нет нормальной поддержки исключений, поддержка STL еще в процессе, да и вообще проект как-то стагнирует

29 апр, 12:50 536 1181448

>>1181367
Как

Ответы8144981633

29 апр, 12:52 537 1181449

>>1181448
Напиши игру.
Движок сам собой получится.

Ответы81455

29 апр, 12:58 538 1181455

>>1181449
Зелёный, уйди

29 апр, 16:59 539 1181633

>>1181448
Смотря какую игру ты собрался делать. Если еба мултиплеерную РПГ, то в одиночку ты соснешь. А вот движок для арканоида или тетриса можно осилить и одному.

29 апр, 18:56 540 1181701

Перекатывать не будете?

29 апр, 23:00 541 1181820

>>1179029
> тебя попросят перевернуть список на бумажке , ты ничего не сможешь
Я бы тоже не смог. Кто ж знал что у жабадебилов строки иммутабельные.

Ответы81836

3 Кб, 700x70
29 апр, 23:26 542 1181836

>>1181820
Байтоеб плез.

Ответы81851

30 апр, 00:24 543 1181851

>>1181836
Блять, в том то и дело что это НЕ нормально.
Нормально просто пройтись циклом до половины строки и поменять значения, все блять.

Ответы81853

30 апр, 00:27 544 1181853

>>1181851
Проблемы начнутся в кодировках уровня utf-8, где символы могут иметь разный размер в байтах.

Ответы8186381943

30 апр, 01:10 545 1181863

>>1181853
Этот метод для любой кодировки, хоть UTF32, работает неправильно - не учитывает что один символ может быть представлен несколькими знаками

30 апр, 01:15 546 1181865

>>1179029
А если попросят сбалансировать AVL-дерево на бумажке?

30 апр, 01:22 547 1181869

Перекат
https://2ch.hk/pr/res/1181867.html (М)
https://2ch.hk/pr/res/1181867.html (М)
https://2ch.hk/pr/res/1181867.html (М)
https://2ch.hk/pr/res/1181867.html (М)

30 апр, 08:58 548 1181943

>>1181853
Про кодировку и слова не было. В противном случае на хую вращаем std::u32string.

3 мая, 12:22 549 1183598

>>1181151
>Проблема в том, что это raw-указатель.
Я только с ними и работал.

3 мая, 12:23 550 1183599

>>1181237
>аноним
>за меня ответил
>это не я писал
Иди нахуй, долбоеб.

Обновить тред
Двач.hk прислал битые данные.
Вы видите копию треда, сохраненную 26 июня 2018 года.
Можете попробовать обновить страницу, чтобы увидеть актуальную версию.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.gq, m2ch.cf, m2ch.fapp.in, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion