Это копия, сохраненная 27 сентября 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Возвысился крестов угрюмый вал,
Отпором быдлу яростным грозящий.
И тот, кто вел меня, ввысь указал:
"Взгляни: взвились, узрев тень говнокода,
Три фурии, которых Он призвал.
Инкапсуляция затмит в обитель входы,
Наследование - средняя из них -
Даст пришлецам вкусить чужого плода,
Полиморфизм поглотит суть". И он затих.
Литература:
Для нюфань:
Три классических учебника для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один,
который больше приглянется.
Герберт Шилдт - C++. Базовый курс (2010) - http://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - http://goo.gl/QvjR6x
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Для желающих сразу начинать с Откровений Создателя - классика (может показаться суховатым):
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2009) - https://goo.gl/87qXtW
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт языка (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - http://goo.gl/0M4NpG
Ссылки:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru/
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/
Блог Герба Саттера (на ангельском) - http://herbsutter.com/
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru/
Памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Предыдущий: >>511121
Cpm.
Biicode платный вроде даже для использования, не говоря уж по хостинг, так что не взлетит.
Да не, он опенсурсный. Там есть какая-то платная поддержка, но обычный репозиторий просто доступен + можно свои серваки поднимать.
Я чего интересуюсь, хочу для личного проекта в плюсы вкатиться, а если вкатываться, то лучше это по-умному сделать и облегчить себе страдания.
На счет переворота строки. Задумался сегодня утром над этой задачкой. И вот что надумал. Поясните прошаренные крестогоспода, верно ли такое решение? Пробелы не считает, размер строки не динамический; но ведь это и не обязательно?
я только учусь. сам в смысле, а не в вузике
char St[20] = {0};
cout << "Vvedite stroku" << "\n";
cin >> St;
for (int i = strlen(St)-1; i >= 0; i--)
cout << St;
cout << "\n" << "END";
Реальнее некуда. Но лучше начни с C. Я тоже сейчас пытаюсь кресты изучать, но без С чувствую огромный пробел в фундаментальных знаниях.
Реально, тем более если школьник - время то есть, если пойдешь в универ на прогера то все равно крестами ебать будут. Кресты это не совсем выгодно по времени, и работу ньюфагу тяжело найти. Но если есть желание именно крестами занятся то можно, в крайнем случае потом перекатишся в что-то другое. Если ты действительно выучишь язык то лишним это не будет.
>Годный блог, в котором все просто и понятно
Да пошёл ты нахуй, блядь, со своей говнокодершей.
>>517072
>Он не позволяет на строку вверх подняться.
Такс-так-такс, а что тут у нас? Классика-классика-классика. Нельзя в <iostream> на строку вверх подняться, это тонкости реализации конкретной консольки, иостриму про неё откуда знать, он чары петушит.
> Да пошёл ты нахуй, блядь, со своей говнокодершей.
Хуебляди бомбит от того, что тян тоже умеют писать код?
Борщехлебу-кукаретику порвало от того, что можно объяснить что-то в двух словах без матиши. "Как же так, нипарядак! Слишкма проста! Былла! Пок-пок-пок!"
Программируют стиральные машины, а разработчик пишет код. Бывают еще такие, кто код не пишет, а дрочит факториалы, кушая борщ. Но они тоже не программисты.
Сам школьник, учу кресты. Ибо паскаль школьный уж больно всратый, а С от него не сильно ушел.
Смотрите, что эта шлюха читает:
https://terrytao.wordpress.com/2015/07/20/a-nonstandard-analysis-proof-of-szemeredis-theorem/
Интересно, она там хоть что-нибудь понимает, или она пускает пыль в глаза быдлу, которое не может оценить сложность того, чем занимается Теренс Тао?
И тут ты такой кидаешь свой гитхаб или пуф места работы с должностью, или тихо причмокиваешь писюном.
Проиграла с мамкиного шовиниста.
Если ты считаешь себя себя лучше Алены, то почему не работаешь в Micosoft?
Адам. Потом его унаследовала тян через функцию friendzone rebro(Adam&)=1;
"Все мужики козлы, все бабы дуры." Стереотипное быдло пытается косить под илитку.
Маня, ты уже все штаны обосрал со своей "аргументацией", прекрати, маме же стирать потом.
Лучше быть няшной проприетарной госпожой, чем обоссаным вонючим гнилозубым спермобаком, которому даже проститутка не даст. Остается только сексоваться со своей рукой и линуксом.
Нет, просто мимо проходила из /dev, зашла поржать над убогими.
Не обобщай, но тян-кодер это что то из области пасхальных зайчиков.
Да у тебя жи стековерфлоу
Уж не знаю, кто там тебя наотвечал вместо меня, но мне бомбит не от того, что она female, а от решительного воскладывания хуйца на стандарт языка, причём не единократно замеченного. И я устал писать об этом в каждом треде, что её обоссывает собственная френд-лента и т.д.
Да, чтобы добить твою "аргументацию", у меня есть знакомая, которая давала мне советы по кодингу (Почему? Потому что я сам у неё спроси.). Ну так вот, её советы со стандартами кодинга совместимы со стандартом языка на 100%, а твоя Алёна-шлюха нет.
>>518280
>Если ты считаешь себя себя лучше Алены, то почему не работаешь в Micosoft?
Пиздец, нахуя я на тебя время тратил вообще, бездарное животное? Пиздуй из раздела обратно в /fem , потому что с таким типом аргументации даже в /dev тебя обоссут.
>>518256
Я процедурный дристальшик с пунктиком на кросс-платформенности, мимо.
> вокруг полно малообеспеченных, нецелеустремленных и некрасивых мужчин, которые не пользуются успехом у женщин
Но ведь сосачеры (и ты тоже) как раз такими и являются. И в первую очередь программистишки.
Алсо, чисто для секса (не для семьи) какая разница, девственница или нет? Девственница даже хуже, ее труднее затащить в постель.
Сам встречаюсь с РСП, мне норм (жениться не собираюсь, конечно).
Если понаделать этих дефолтный конструкторов, задать массив, нормой ли является тупорылое присвоение методам классов значений? До этого они передавались в конструктор. Это выглядит убого, на мой взгляд, но как-то по-другому не выходит. Вариант с инициализацией массива
Сl cl[2]
A::A():cl[0](1,2),cl[1](2,3){}
в конструкторе класса, содержащий массив объектов, не работает нихуя. Все способы, которые видел в инете, являются каким-то костылями.
Мимо-борщехлеб
Причем виновата не баба, а долбоёбы у которых синдром тян не нужны.
Программа "[178944] test.exe: Машинный код" завершилась с кодом 3 (0x3).
Гуглил, говорят, что ошибка потока ввода.
Где-то говорили, что "код русской буквы не пренадлежит интервалу от -1 до 255" Но крашится, даже если я ввожу английские или русские литеры.
[code]
#include <iostream>
#include <string>
#include <conio.h>
#include <clocale>
#include <cctype>
using namespace std;
int main()
{
\tint number = new int;
\tnumber = 10;
\tdouble _pojertvovaniya = new double[number];
\tfor (int i = 0; i < 10; i++)
\t{
\t\tcin >> (_pojertvovaniya + i); //можно как _pojertvovaniya
\t\tif (!isalpha((_pojertvovaniya + i))) //Проверка, а буква ли это?
\t\t\tcontinue;
\t\telse cin.clear(); break;
\t}
\tfor (int i = 0; i < 10; i++)
\t{
\t\tcout << (_pojertvovaniya + i);
\t\tif (!isalpha((_pojertvovaniya + i)))
\t\t\tcontinue;
\t\telse cin.clear(); break;
\t}
\tdelete number;
\tdelete[] _pojertvovaniya;
\tsystem("pause");
\treturn 0;
}
[/code]
Скажите, где копать, в чем ошибка.
Программа "[178944] test.exe: Машинный код" завершилась с кодом 3 (0x3).
Гуглил, говорят, что ошибка потока ввода.
Где-то говорили, что "код русской буквы не пренадлежит интервалу от -1 до 255" Но крашится, даже если я ввожу английские или русские литеры.
[code]
#include <iostream>
#include <string>
#include <conio.h>
#include <clocale>
#include <cctype>
using namespace std;
int main()
{
\tint number = new int;
\tnumber = 10;
\tdouble _pojertvovaniya = new double[number];
\tfor (int i = 0; i < 10; i++)
\t{
\t\tcin >> (_pojertvovaniya + i); //можно как _pojertvovaniya
\t\tif (!isalpha((_pojertvovaniya + i))) //Проверка, а буква ли это?
\t\t\tcontinue;
\t\telse cin.clear(); break;
\t}
\tfor (int i = 0; i < 10; i++)
\t{
\t\tcout << (_pojertvovaniya + i);
\t\tif (!isalpha((_pojertvovaniya + i)))
\t\t\tcontinue;
\t\telse cin.clear(); break;
\t}
\tdelete number;
\tdelete[] _pojertvovaniya;
\tsystem("pause");
\treturn 0;
}
[/code]
Скажите, где копать, в чем ошибка.
Я не отрицаю, что адекватные мужчины иногда читают двачи, а изредко даже отписываются. Но те, кто сидит здесь на постоянной основе - очевидное дно, омежные сосачерские дебилы и выродки (не упомянула рф-чуханов, поскольку с ними все и так ясно).
Отвечать им, а тем более вступать в полемику - все равно что вступать в полемику с говном, на которое ты случайно наступила.
1. Ты забыл фигурные скобки и break у тебя выполняется всегда. Вообще пиши всегда if(){}else{}, и никогда if()...;. 2. ты записываешь вывод cin в double а потом проверяешь через isalpha - так это не работает. тебе нужно записать вывод cin в string (или char[]) и тестить строку, и если atof(..) срабатывает, то сохранять в массив.
Но ведь С++ это С и ООП. Если ты начинаешь С++ по книженциям и с самого начала, то ты будешь понимать все и без знания С.
Няш, ну я же уже отвечал тебе в одном из предыдущих тредов. Лена не идеальна, но лично я во времена ньюфажества нашел у нее в блоге много полезного, причем потратил на это немного времени из-за краткости статей. Более того, половина ее статей являются дословным переводами Саттера и других гуру, к которым претензий вообще никаких. Так что, я по-прежнему считаю, что ссылка на подобный блог в шапке должна быть. Если бомбит конкретно от Лены, предложи что-то лучше условия: на русском и кратко, чтобы был не учебник под маской блога, я с удовольствием поменяю тогда. Но просто удалять без замены и намеренно обеднять шапку только чтобы у кого-то не бомбило это не дело, верно же?
мимооп
1. Буду писать, как ты сказал.
2. Да я идиот, надо было в начале просто попробовать ввести в double массив значение типа char и убедится, что получается дребедень.
string не хочу пока, что использовать.
Почему я пытался ввести в массив double значение типа char?
Меня просто ввел в заблуждение код, который позволял проверять, вводится ли символ вместо double.
Вот этот код.
http://pastebin.com/tsXFkffc
Я так понимаю, что моя проблема в том, что я не до конца понимаю, как работает поток ввода cin.
cin это метод класса istream ?
C++ это не надмножество C, так то. Некоторые детали у них различаются, обратной совместимости нет.
cin - это экземляр класса. Какого - не помню. А работает он через перегрузку оператора >>. Блин, я не знаю, как объяснять кресты с нуля.
>я не знаю, как объяснять кресты с нуля.
Не стоит. Я прочту и разберусь сам.
Спасибо за предыдущие разъяснения.
Сорян, в сажу по дороге вступил.
>почаны
>Сорян
'a' в C будет int, а в C++ char. В C можно вызывать main явно, а в C++ нельзя. Ну и в таком ключе все.
Спасибо, командир. Добра тебе.
Я уже второй тред не могу понять, чё ты вообще за говнокод пихаешь. В твоём фиксе нихуя нет '\0', чё ты вообще от нас хочешь-то блядь.
А обязательно на русском? Если да, то
>Программирование. Принципы и практика использования C++
хотя сто лет в обед вышла вторая версия, которую никто ещё не перевёл с английского
>Stroustrup_Principles_and_Practice_Using_C++_2ed_2014
P.S. Уж не думал, что буду рекламировать Страуструпа, но если вы тут Алёне поклоняетесь, то Страуструп просто Бог для новичков.
Всё правильно ты ему объясняешь, проще и не объяснишь. Он поймёт, когда напишет свою первую функцию, использую объект типа istream по ссылке.
Ну смари, мне-то без разницы, на каком языке. Но мы же говорим про ньюфагов, так что, думаю, тут что-то на ангельском использовать нельзя. Потом, книжки (и страуструпова в том числе) и так есть в шапке, но там же многобукаф и не все осилят. А нужен блог, чтобы отдельными маленькими статьями разбирались подводные камни, без синтаксиса и прочей хуйни. В идеале что-то типа HotW Саттера, который в шапке есть, но на русском.
Любая сущность должна иметь наименьшую возможную область видимости. Если никто, кроме твоего класса, использовать структуру не должен - объявляй ее внутри класса. Если используется только твоими классами - объявляй в собственном отдельном пространстве имен. Ну ты понел.
const можно присваивать любое значение, которое вычислится во время работы программы. constexpr должно быть известно на этапе компиляции, т.е. ты в общем случае можешь сделать constexpr int number = 1488, но не сможешь сделать constexpr Mamka tvoya_mamka = calculateMamka (). Чтобы было можно, нужно наложить на calculateMamka () дохуя ограничений, даже если она вычисляется на этапе компиляции. Правда, они ослабляются с каждым новым стандартом. В C++11 было необходимо делать тело из одного оператора return, сейчас уже их меньше, если не ошибаюсь. Ну и поддержка constexpr еще не везде полная есть.
>А нужен блог, чтобы отдельными маленькими статьями разбирались подводные камни, без синтаксиса и прочей хуйни.
>без синтаксиса
Я конечно извиняюсь, но ньюфагам во многом синтаксис и нужен.
>>518835
Вот не соглашусь здесь. Если структура используется как тип и только как тип, без единого метода (кроме быть может дефолтного конструктора), то целесообразно объявить её Struct() {} даже без private public, т.е. пусть будет публичной по умолчанию. Что, жалко, что ли? Откуда ты знаешь, как ты будешь использовать её потом?
Вся вот эта мания сделать всё приватным, а потом при необходимости налепить геттеров/сеттеров и/или друзей/наследников мне непонятна. Иногда структура это просто тип, считай двумерный или более тип. Использоваться может где угодно.
Мой любимый стракт это дабл + бул.
Подсказка.
>Я конечно извиняюсь, но ньюфагам во многом синтаксис и нужен.
С моей скромной точки зрения, помимо написания кода на практике что, конечно, самое главное%, обучение языку складывается из изучения синтаксиса, библиотек и тому подобного и изучения "духа" языка - типовых проблем, хаков, паттернов, если угодно. В шапке первый раздел, грубо говоря, отвечает первому из этих пунктов книжки для ньюфагов, в основном, про синтаксис, если там и есть паттерны программирования, то самые простейшие, и их мало - поэтому прочтения книжек для ньюфагов недостаточно, хотя синтаксис они покрывают почти полностью%%. Второй раздел соответствует "духу", но тут проблема в том, что этих мелких деталей, которые в конечном счете определяют опыт погроммиста, очень много, в книжку они не влезают, да и формат не тот. Поэтому, например, Мейерс покрывает это только отчасти, а чтобы набирать опыт дальше, нужно кодить и решать какие-то повседневные задачи. А если просто кодить и не делать никаких выводов, то так и останешься говнокодером. Задумается ли ньюфаг после прочтения книги "C++ за 21 день", какой контейнер STL ему применить и почему? Да вряд ли, он будет хуярить везде vector и list, не задумываясь о деталях. Или какие-нибудь зубодробительные правила для выведения типов - об это энивей нужно обжечься сначала, или ты просто не поймешь, зачем вся эта скукота нужна. Ну и поэтому правильным мне кажется гуглить возникающие вопросы и смотреть, что на эту тему пишут на всяких stackoverflow, ну и в блогах, конечно. А заодно и почитывать блоги независимо, там формат как раз подходящий - небольшие, законченные статьи, каждая раскрывает свою тему. Никто не говорит, что блоги должны заменять книги, или тем более практику. Они не заменяют. Но и книги не заменяют блоги, хотя бы уже потому что блоги обновляются гораздо чаще, чем книги, а их количество больше.
Хорошая идея. Я могу детально расписать за Visual Studio, если кто-нибудь запилит гайд по настройке чего-нибудь никсового для нюфань, то будет совсем здорово.
Естественно отличаются, но можно начинать учить С++ и ты не будешь чувствовать нехватку знаний С.
Вопрос такой: прокатит ли такой ответ на собеседовании? Строка вводится как "абв", выводится как "вба". Условия задания соблюдены и мое решение гораздо проще и короче, чем у >>517661 . Вот твой гребаный пейстбин http://pastebin.com/Gyav00VF
char St[20] = {0};
cout << "Vvedite stroku" << "\n";
cin >> St;
for (int i = strlen(St); i > 0; cout << St[--i]);
cout << "\n" << "END";
> for (int i = strlen(St); i > 0; cout << St[--i]);
У нас во дворе за такое убивают нахуй.
std::reverse(st, st + strlen(s));
>std::reverse(st, st + strlen(s));
у нас за такую хуйню тоже нахуй убивают.
У меня за один проход по массиву выводится строка в обратной последовательности, у тебя - два прохода плюс изменение данных в памяти. Из-за таких вот мелочей потом прибегает заказчик с выпученными глазами и криком "Сука, почему у нас на продуктиве все тормозит?"
И ты такой делаешь быстро, заказчик доволен и не продляет договор на техподдержку продукта. Не маленький, пора бы уже знать.
Не люблю так делать, но я просто предложил, а как это сделать не знаю. Мои познания в иде это что ф9 запуск программы.
Почитал. Что он делает понял. А зачем нет.
char ch=int(f);
char ch=static_cast<int>(f);
Это одно и тоже? В каких случаях они будут делать разное?
> Не понимаю смысл static_cast
Удобней искать в проекте. Тебе захотелось посмотреть где ты кастишь к инту - ищешь static_cast<int> - при других способах могут вылезти проблемы (ложные срабатывания). Ну и более заметная запись. Преимущества только в синтаксисе, никаких особых свойст у static_cast нет (по сравнению с старыми способами каста).
Спасибо. Это и хотел узнать.
Ну и ладно, тогда распишу за VS только. Все равно большинство нюфань под виндой.
Вопрос от нюфани: на каком этапе из оп-поста можно пытаться монетизировать знания и навыки полученные при прочтении книг и выполнении практических задач из них, путем устройства на работу или подфрилансить не много где-нибудь?
Алсо я пока только массивы в Лафоре читать закончил, но я твердо настроен выучить кресты и работать на них, пока что всю инфу схватывал не напрягаясь.
После второго пункта и пары самостоятельно написанных средних проектов тысяч на пять строк, которые решают не совсем искуственные задачи какие-нибудь игры, например ты будешь твердым джуниором. Дальше просто читать книги нет особого смысла, надо начинать работать над реальными проектами уже.
Тут одно и то же. Первое это приведение в стиле С, оставили для совместимости с этим языком. Второе уже чисто С++, Страуструп писал, что он специально создал такой уродский синтаксис, чтобы его не хотелось писать и легче было найти в коде.
Когда std::end начал работать с char*? Длину строки он подгружает из головы пользователя с помощью libastral.so?
>>519057
Обоссал обиженку. Ты знаешь, что за буйство внутри ostream::operator<<? Никто не использует стандартные потоки для ввода-вывода, кроме авторов laba2 вроде тебя, тем более поэлементно. Иди и померяй сколкьо твой "быстрый" вариант работает. Тормозят у вас на продуктиве только девелоперы.
Да, прекрасно, просто замечательно
> char c[] = "123\0\0\0";
> std::cout << "strlen = " << strlen(c); // 3
> std::reverse(std::begin(c), std::end(c));
> std::cout << "strlen = " << strlen(c); // 0
Даже не знаю, в кого ты такой осёл.
Спасибо за ответ.
algorithm требуют, чтобы в строках не было терминальных символов. И это правильно, потому что строки из терминальных символов практически никогда не нужны, а их отсутствие позволяет реализовать тот же reverse проще, чем с дополнительным расчетом длины. Так что твой пример по стандарту будет UB, и ничего удивительного в том, что все ломается.
И ещё, ненемного непонял http://doc.qt.io/qt-5/qsystemtrayicon.html#showMessage 3го аргумента, как его задать?
>можно ли как то изменить внешне Qsystemtrayicon::Showmessage
Только если рисовать вручную. Короче, считай что нельзя.
>как его задать
Указав через запятую после второго. В чем проблема?
Очень жаль, людям не очень нравится обычный вид мэсэджа. :(
Я не могу понять в каком виде.
У меня есть что то типа:
trayIcon->showMessage("USER", fio);
Что дописать надо? Создать переменную:
MessageIcon icon;
и дописать:
trayIcon->showMessage("USER", fio, icon = QSystemTrayIcon::Information);
Или icon = 1?
Вместо QSystemTrayIcon::Information можно написать любой отсюда http://doc.qt.io/qt-5/qsystemtrayicon.html#MessageIcon-enum?
Может, для начала тебе стоит изучить основы языка C++? Почитай учебник, выполни задания, чтоб таких вопросов не возникало. Прата вполне подойдет.
Ты какой-то юродивый. Я там нули поставил, чтобы небе очевиднее было, что std::end предназначен для работы с массивами, а не со строками. Вот менее очевидный пример, где нули после литерала поставил компилятор, а не я сам.
> char c[] = "123";
> std::cout << "strlen = " << strlen(c); // 3
> std::reverse(std::begin(c), std::end(c));
> std::cout << "strlen = " << strlen(c); // 0
Он тоже не работает. И не будет работать. С буферами не будет работать. Со введёнными пользователем строками в эти буферы не будет работать. С литералами не будет работать. Ни с чем не будет работать. UB только у твоих папки с мамкой по пьяни было, когда он на гандоне воздух из спермоприёмника не выдавил.
Буду рад, если поможете.
Есть код программы. В ней вводятся с клавиатуры две переменные. Первая это переменная типа char символ, который будет напечатан N число раз. И переменная int, то самое кол-во раз.
Все работает хорошо. Но вот есть в этом коде место, которое я понять не могу. Меня смутила объявление указателя типа char и его дальнейшая инициализация
Прилогаю код, в нем закоментировал ход моих мыслей. Если где-то я не прав, поправьте пожалуйста.
http://pastebin.com/f35Mcpbi
Функция buildstr возвращает не массив а указатель на него. Пробей больше инфы про то как работают указатели и строки в C. Так ты нихуя не поймешь.
Ясно.
Раскукарекался тут очевидно, ты, там толстый вброс, который выводит одну и ту же строку несколько раз.
Сам ты толстый. Просто небольшая ошибка. Нужно добавить и все будет работать.
>>519702
От как жопой чувствовал, что при изучении С++ придется С учить. Ну никак не хотелось.
Да простите, это у меня уже шарики за ролики едут, после чтения книги с 9 утра.
Как даже видно из прототипа функции
char buildstr(char c, int n)
ее возвращаемое значение это указатель. Массив это указатель, адресом которого является, адрес его первого элемента.
Меня смутило объявление указателя и сразу его инициализация через возвращаемое значение функции
char ps = buildstr(ch, times);
Как я писал до этого, мне понятнее
char * ps = new char;
ps = buildstr(ch, times);
Благодарю за советы.
char buildstr(char c, int n)
а не
char buildstr(char c, int n)
и
char ps = buildstr(ch, times);
а не
char ps = buildstr(ch, times);
Что-то символ * потерялся.
char buildstr(char c, int n)
а не
char buildstr(char c, int n)
и
char ps = buildstr(ch, times);
а не
char ps = buildstr(ch, times);
a не
char buildstr(char c, int n)
а не
char buildstr(char c, int n)
и
char ps = buildstr(ch, times);
а не
char ps = buildstr(ch, times);
> Меня смутило объявление указателя и сразу его инициализация через возвращаемое значение функции
И чем смутило?
Мне понятнее так
http://pastebin.com/bG8LaYhm
Я знал, что при объявлении массива его можно инициализировать. Но объявление
http://pastebin.com/P1jduxg5
в моем тупом мозгу ассоциировалось с разъименовывание указателя
*ps = pstr
(pstr - адрес указателя)
Просто субъективное восприятие, которое пришлось и приходится подавлять у себя в мозгу.
Но ведь «pstr» это тоже адресная переменная, нинада ни чего подовлять.
http://pastebin.com/mk5iWTnH
ошибка:
значение типа "char " нельзя присвоить сущности типа "char"
вакаба не ешь амперсанд, пожалуйста.
Мне не выдает ошибку.
Вот код.
>>519696
Там где большой комментарий. Там происходит объявление и инициализация указателя значением, возвращаемым функцией buildstr.
Мной такой синтаксис не воспринимался. Мне понятнее было
http://pastebin.com/bG8LaYhm
Думаю хватит мне флудить и уделять этому вопросу много внимания. Я уже все понял и разобрался.
> Не понимаю смысл static_cast. Знает кто примеры где без него нельзя обойтись?
Да. Прочитал ты такой в std::string проксоренную строку. Строку проксорили — там есть char-ы с любым значением, от -127 до 128 (в случае дефолтных знаковых char-ов)
И хочешь произвести частотный анализ. Используешь символы из строки как индекс в массиве и вылетаешь за границы, т.к. знаковый отрицательный char превращается в отрицательный индекс.
Тут без каста никак.
не понимаю почему тебе так было понятнее. Ты знаешь что делает new char? если ты так напишешь у тебя в памяти будет висеть неиспользуемая и недоступная переменная
Собственно, Java придумывалась для микроконтроллеров. Для микроволновок, холодильников, стиралок etc.
Ну не суть. Если тебе интерестно баловаться с данными. Создавать и изучать разные структуры данных и организации памяти, собственные устройства, тебе будет интересен C и C++. А если нужно обычное приложение подойдут и более простые языки.
>>519789
Только на самых ранних стадиях развития. Я говорю про сегоднящний день.
>C и C++
Это уже сильно разные языки.
Короче, я намякивал, что пора бы уже std::string везде. И забыть про new/delete.
>Это уже сильно разные языки.
Пока все что написано на C справедливо и для C++ я бы не назвал эти языки разными.
>>пора бы уже std::string везде
Для работы со строками конечно лучше использовать string. Как char* строки используют наверное только при обучении.
>забыть про new/delete
и как ты собираешься динамически работать с памятью?
>Пока все что написано на C справедливо и для C++
Допустим, вот функция
void f();
Какое число аргументов она принимает в C и какое в C++?
> и как ты собираешься динамически работать с памятью?
unique/shared_ptr или просто выделять на стеке и возвращать/передавать. Когда надо, компилятор или скопирует, или переместит значение.
Здраствуйте, поступила просьба ознакомить ньюфага с RAII. Такое дело вообщем, в с++ стековые переменные удаляются по выходу из скоупа епте, а для объектов вызывается даже деструктор. Именно так работает vector, он динамический, но delete же ты для него не используешь? Или как? Ну вообщем хуяришь все объекты в смартпоинтеры и забыл про delete.
Ну это уже более высокий уровень абстракции. Я имел в виду что для написания собственного контейнера, который будет динамически выделать память, без new/delete не обойтись. Потом конечно можно забыть про них. Но если изучать язык с нуля неплохо бы знать о них, вместо слепого использования уже готовых контейнеров.
Будем откровенны : если ты пишешь на плюсах или там джаве или шарпах, тебя вряд ли понадобится писать свои контейнеры. Если хочешь написать либу, есть C. Си это мощь и простота работы с памятью, с++ высокоуровневый язык для гуая и прочего такого. Это ад дебажить с++ код, активно использующий работу с памятью.
>Ты знаешь что делает new char?
Выделяет область памяти в куче под переменную указатель.
Затем эта переменная указатель инициализируется возвращаемым значением функции. Тот указатель (массив) что создается в функции, память под него удаляется, как только функция отработается.
> Мне понятнее так
Нихуя у тебя не понятнее, у тебя в первом сниппете утечка памяти (если закрыть глаза на синтаксис). Подавляй у себя в мозгу интуитивное понимание языка, ты до этого ещё не дорос.
>>519904
На самом деле ты нихуя не понимаешь. Иди перечитывай учебник
> Тот указатель (массив) что создается в функции, память под него удаляется, как только функция отработается.
У тебя _очень_ плохое понимание времени жизни переменных.
> у тебя в первом сниппете утечка памяти
Да new char выделяет память, но эта память ничем не инициализируется так?
> У тебя _очень_ плохое понимание времени жизни переменных.
Не пойму то ли я жопой читаю, то ли меня наебывают.
new выделяет память в куче. Неважно инициализировано она или нет. Память ты выделил, но не удалил.
>>отведенная под указатель pstr (НО НЕ ПОД САМУ СТРОКУ), освобождается
Когда ты пишешь char ps; под этот указатель выделяется память в стеке, она удалится по выходу из скоупа, но не то, на что она указывает.
Твой код равносилен этому:
char ps;
new char; // утечка
ps = buildstr(ch, times);
Освобождается память, отведённая под указатель, а не под саму строку, жопой читаешь, да.
Спасибо, не знал, что так можно использовать new.
И не знал, что можно объявлять указатель, без его инициализации.
Это многое объясняет.
>Освобождается память, отведённая под указатель, а не под саму строку, жопой читаешь, да
Вопрос тогда в том, как удалить память выделенную под строку?
когда уже нет необходимости в строке, или использовать string или смарт поинтеры.
> Да new char выделяет память, но эта память ничем не инициализируется так?
Да, так и что дальше? Утечка никуда не делась.
> Не пойму то ли я жопой читаю, то ли меня наебывают.
Жопой читаешь. Посчитай на листочке, сколько памяти выделено, и сколько освобождено.
>>519934
Блядь, как ты не знал? Ты читал учебник? Многое ему объясняет. Там где есть new, там должен быть delete. Запомни простое правило.
Я не корректно выразился.
Я не знал, что так можно выделить память под указатель, как было описано в посте >>519927
То, что память выделенную, надо отчищать при помощи delete это я знаю.
В учебнике всегда давали такой синтаксис, при выделении памяти.
Там объявляется указатель, и сразу же инициализируется выделенной памятью.
Затем память отчищается с помощью delete.
http://pastebin.com/w3gicxSN
Оу. Вот это я обосрался. Этот джентльмен абсолютно прав, а я раньше не задумывался над этим и всегда на автомате считал, что end у c-like строк укажет на терминальный нуль и меня спасло только то, что я никогда не переворачивал c-like строки, а использовал string. Вот я хуиная голова, лол.
Антоши, поясните за полиморфизм. Как я могу получить доступ к длинне хуя?
Так полиморфизм в этом и состоит что у твоего men какбы вроде и нет хуя (хотя на самом деле ечть). Объект класса Men выглядит полностью как объект класса Human (тоесть без хуя), хотя на самом деле является объектом класса Men (тоесть с хуем).
Ну хорошо. В таком случае работает. А что если мне нужно сделать массив людей? Все равно же нужен будет указатель на Human?
а он точно уверен, что знает что такое полиморфизм?
>>520121
Делай виртуальный метод int my_score() у Human и
[CODE]
void draw_my_score(){
std::cout << this->my_score() << std::endl;
}
[/CODE]
У мужика делай int my_score(){return this->dlinnaHuja;}
Делай бабу, у неё не хуй, а сиськи и она переопределяет my_score как return breast_size;
Создавай в main()
[CODE]
Man male = new Man();
male->draw_my_score();
Woman female = new Woman();
female->draw_my_score();
[/CODE]
Никак? Потому что как Human у тебя может быть Woman, у которой параметра dlinnaHuja нет.
мимопроходил
полиморфизм, друг мой, это не про "а как получает методы наследников", а про "а как наследник, вызывает метод, определенный в предке, который в свою очередь вызывает метод ПЕРЕОПРЕДЕЛЁННЫЙ наследником"
Полиморфизм это доступ к переопределенным твоими наследниками методам
Хуй может быть только у Man. Чтобы его увидеть ты должен Human скаставать к Man, как тебе и говорили.
Не путай указатели и ссылки.
Определить в Human virtual getHujOrBufera()=0; и переопределить в наследниках, возвращая соответствующее. Крайне тупой пример в любом случае.
Ну так то понятно, а есть способ сделать функцию видимой только для одного наследуемого объекта? Допустим вот с таким способом у меня баба может увидеть функцию getDlinnaHuja(), которая ей нахуй не всралсь.
> видимой только для одного наследуемого объекта
нет. если ты хочешь такое, ты неправильно понял всё наследование
Если ты хочешь getHui, значит ты заранее знаешь, что у тебя лежит в массиве (мужик), а значит полиморфизм тебе не нужен.
Короче ясно. Выходит что у всех наследуемых объектов прототипы функций должны быть идентичными?
лол, конечно нет
И каким образом ты узнаешь кто у тебя находится в katka[1]? Скажем в товем примере это ясно, но в другом случае в katka[1] может оказатся как Man так и Woman и получится обосрамс. Ты хуйней занимаешся с такими массивами. Такое делать не рекомендуют. Если у тебя есть масив Human то работай с ними как с массивом Human.
баба может вертеть сиськами, а мужик - вертеть хуем. Причем "Human" может не содержать этих методов
Я пытаюсь сделать чтото вроде game of life только с разными животными. Мне нужен именно массив родительских объектов.
А как тогда вызвать эти функции? В случае если мы инициализируем бабу и мужика через указатель на Human.
Никак. В этом и прикол. НИКАК. Ты не можешь обращаться к конкретным методам, не зная, что перед тобой находится. А ты не знаешь.
Ну на самом деле можно, добавить int tag в Human и кастить при использовании, только это настолько хуево, что пиздец.
это опять нарушает парадигму
Бля я так и не попробывал так сделать. Теперь все заебись. Спасибо за помощь.
На форумах постоянно обсуждается SetTimer, но он не катит, т.к у меня нет хендла окна или че он там требует обязательно. А без него собсна KillTimer не работает. Пробовал выносить в отдельный поток CreateThread, но ваще какая-то хуйня выходит. Подскажите че нибудь, спасибо. (Sleep не катит, сразу говорю)
Делаешь в animal виртуальный метод getRabbitEatenCount(), определяешь его только в лисе. У остальных - не определяешь
если у меня будет массив из Animal*, getRabbitEatenCount() будет виден и в зайце.
Это называется downcasting. Используй dynamic_cast. Подробнее https://www.tutorialcup.com/cplusplus/upcasting-downcasting.htm
>Ну на самом деле можно, добавить int tag в Human и кастить при использовании
Откуда вы берётесь, идиоты? Тег добавить, кастить при использовании. Вообще охуеть.
Есть стандартный механизм — dynamic_cast. Который проверяет что надо
Не стоит использовать C-style касты в плюсах.
>SetTimer, но он не катит, т.к у меня нет хендла окна
Хендл окна ненужен, можно ноль передавать.
я говорю, что тогда KillTimer не работает.
То есть не убивается созданный таймер, т.к без хендла не работает второй параметр, то есть id того самого таймера.
> без хендла не работает второй параметр, то есть id того самого таймера.
Чёт ты гонишь.
uIDEvent [in]
Type: UINT_PTR
The timer to be destroyed. If the window handle passed to SetTimer is valid, this parameter must be the same as the nIDEvent value passed to SetTimer. If the application calls SetTimer with hWnd set to NULL, this parameter must be the timer identifier returned by SetTimer
Так или иначе, юзай std::chrono
Можно так просто взять и вызвать конструктор без нихуя?(
Вызов конструктора это и есть создание объекта.
Сам то понял че спросил? после throw как раз и создается объект
Ты имеешь в виду как вызывается конструктор без объявления переменной? Ну, типа, вот так и вызвается.
Можно просто в реализации хумана для getHui возвращать nullptr, а в реализации мужика переопределить на возврат указателя на хуй. Только потом надо лепить проверки, что не nullptr, но как вариант.
Да это все хуйня. Я хотел чтобы нигде кроме мужика эта функция вообще не была видна. Downcasting отлично подходит.
Вот очередной программист лишился анальной девственности, введя себе в жопу динамическую дилду.
Подстажите, как Qt Creator указать аргументы командной строки.
Хочу, допустим, сделать, чтобы таймер выполнялся в отдельном потоке, да, ну чтоб не фризило саму программу.
Делаю так, но все равно фризит:
[code lang="c++"]
int main()
{
\tstd::thread thread(timer);
\tthread.join();
}
void timer()
{
\tstd::this_thread::sleep_for(std::chrono::seconds(5));
}
[/code]
Нашел на SO такой пост (пик). В мой пост не добавлялся текст якобы какое-то слово из спам-листа.
То есть sleep_for не подходит и придется как-то изъебываться, чтобы не фризило саму программу, а текущий поток?
Говорю, чтобы не фризило всю программу, а текущий поток. Или от дальнейших действий зависит реализация таймера?
Опиши задачу, а не способы, которые ты ищешь.
Например, вызвать какой-то код по истечению таймера, при этом не блокируя тред.
да хотябы самое элементарное, чтобы по истечению таймера выводило в консоль/на экран сообщение, вооот. Мол прошло столько времени.
офк понятно, что можно и с зависанием основного окна, но это не круто, хотелось бы научиться по-нормальному делать.
Создаётся новый объект типа UI::MainWIndow и присваивается указателю ui
Не до вызова конструктора, а до выполнения тела конструктора.
Интересно, но, почему-то, откладываю на потом, думаю что ничего не смогу, что я хуйло и так далее.
В смысле? Попробую кодить на С++, а самооценка у меня перманентно плохая.
скорее всего да, С++ потихоньку перекатывается в специфичные области, где для нормальной работы требуется знания этих областей: сети, математика, электроника, телеком и тд.
А ну ок, продолжу читать Страуступа дальше вступления.
Хочу написать свою игру, у меня тонна идей.
На самом деле С++ относительно сложный язык и что бы качественно на нем писать надо убить кучу времени. Если у тебя просто идея которая не требует еба графики или еба вычислений, то все таки лучше делай на питоне или на джаве тут даже под андроид сможешь запилить.
>>521030
Да не пизди, нормальный язык просто у него есть своя специфика. Java это легко в изучении и трудей выстрелить в ногу, но расплачиваешься ресурсами что в 21 веке не так уж и важно чаще всего.
не читай Страуструпа. Возьми Прату или еще кого нибудь, но только не Стауструпа.
>но расплачиваешься ресурсами что в 21 веке не так уж и важно чаще всего.
То ли дело QT: к экзешнику на 3 мб прикладываешь либы на 40 мб.
JRE весит 28 мб установочный файл.
Расскажи как правильно.
void MainWindow::onDataReceived(const QByteArray &array)
Да.
Мне, например, не нужно, чтобы он(поток) постоянно что-то там выполнял, а только при вызове делал свою работу и завершался.
Вот, и хотелось бы узнать у вас, в основном все пишут, что потоки убивать не рекомендуется. А нормального ответа так и не увидел почему? Подскажите как быть.
потому что создание и завершение потока - относительно трудоёмкая операция, лучше иметь определённое количество запущенных потоков и вести для них очередь (или отдельные очереди) задач на выполнение - гугли по thread pool
Их дорого потом создавать, вот и всё. Просто не убивай его, пусть хуи пинает, пока снова не пригодится.
Тогда убивай, а то распидорасит. Загрузка-выгрузка dll ещё дороже создания треда.
MVS 12/13/15
[code lang="c++"]
class Token {
public:
char kind; // вид лексемы
double value; // для чисел: значение
Token(char ch) // создает объект класса Token
// из переменной типа char
:kind(ch), value(0) { }
Token(char ch, double val) // создает объект класса Token
:kind(ch), value(val) { } // из переменных типа
// char и double
};
[/code]
Получается, допустим, я делаю так:
[code lang="c++"]
Token t('+');
t('8', 15);
[/code]
Вот и выходит, что эти два объекта будут записаны? (знак плюс и число) или же произойдет перезапись. Просто я не понимаю, перевод ли такой или я просто туплю.
> Вот и выходит, что эти два объекта будут записаны? (знак плюс и число) или же произойдет перезапись. Просто я не понимаю, перевод ли такой или я просто туплю.
Конструктор класса можно вызвать лишь один раз при создании экземпляра.
Не требуется.
Visual studio. Rutracker
давно у меня дело было, хидеры подправь, там что типа заменить
func(int right, int top, int right, int bottom)
на
func(int left, int top, int right, int bottom)
Что тут объяснять-то? Не может в одной области видимости быть две переменных с одинаковыми именами.
Эту функцию я знаю, проблема не в этом, а в том, как перерисовывать. Вот как перерисовать половину буквы или кнопки?
> превозмогать и пытаться понимать инглиш версию?
Думать нечего, плюсы 1990-х и плюсы 2010-х это два разных языка с тем же названием
Язык довольно сильно поменялся с тех пор, сразу новую версию будет лучше. В принципе можно прочитать старую а потом отдельно про новые фичи, но зачем? Хочешь быть программистом (не на 1c/php) - умей свободно читать технический английский. Без него ты говно ненужное.
что именно нужно зделать?
Для этого, но писать на нем - то еще удовольствие, да и говно мамонта. Юзай либо Qt (если хочется стильно, модно, не пугает порог вхождения), либо какие-нибудь wxWidgets (если надо попроще и без лишних заебок).
не получится стильно модно на Qt - все приложения на Qt выглядят как говно (кроме приложений типа 2Gis, где допустим полностью нестандартный UI)
Какие-то у тебя странные приложения, у меня все норм выглядит.
Ну и вообще, если задача несложная - лучшим вариантом может быть выучить шарп. Раз уже знаешь плюсы, начать клепать формочки там можно буквально за пару дней. Ты не подумай, я не фанат шарпа, но более простого и без сюрпризов формошлепства пока не видел.
Если верить википедии, из того, что я использовал за последние пару лет, Qt Creator, Octave, KeePass, VirtualBox и клиент близзардовский юзают Qt.
Никакого недовольства внешним видом этих программ я не испытывал. Хотя мне обычно в принципе похуй, если не совсем как говно выглядит, это да.
ясно всё с твоим вкусом... у всех этих программ интерфейс выглядит так же парашно, как у какого-нибудь LibreOffice
Да это даже не дело вкуса, просто насрать. Шрифты читаются, интерфейс более-менее понятный, кислотных цветов нет, лейблы за границы окна не вылезают - значит все норм.
Я сейчас ебанусь. Что за дерьмо мне возвращается вместо моего инта? И каждый раз разное.
Погугли состояния потока. тогда. Поставь так чтобы цифры как цифры выводились.
Все. Разобрался. Нужно было в конце не просто рекурсивно вызывать функцию но и сразу возвращять всю эту хуйню.
>return calculate(expr);
Внешний вид интерфейса программы в первую очередь зависит от того, кто его проектирует и делает, а не от того, какая библиотека для этого используется, исключая, конечно, всякие крайние случаи. Плюс надо, чтоб он не тормозил.
Были времена, когда все юзали или WinAPI или MFC, а программы выходили как с хорошим интерфейсом, так и с говеным.
А раз ты такой эстет, то поведай нам интерфейс каких программ ты считаешь очень хорошим.
я имел в виду нативный интерфейс и только
посмотри на microsoft office, visual studio и т.п. - насколько они органичнее смотрятся в системе, чем говноподелия на qt
он с чем-то кроме gcc умеет работать?
Какая тебе еще нужна аргументация кроме твоей некомпетентности? Qt уже давно может в нативный look and feel, внутри него используется (кто бы мог подумать?!) винапи.
> Как мне перерисовать только заданную область?
http://stackoverflow.com/a/1781030 says:
> Call GetUpdateRect() to get a rectangle that bounds the region to be updated. This information is also included in the PAINTSTRUCT (as the rcPaint field) passed to BeginPaint()
MSDN says:
> The BeginPaint function automatically sets the clipping region of the device context to exclude any area outside the update region.
Берёшь и перерисовываешь. Всё, что не попадёт в рект, отбросится.
Ну давай, разъясни мне преимущества обоссанного g++ в сравнении с icpc, обоссаного vim в сравнении со студией/clion
Кукареку через 3... 2... 1...
>>обоссаного vim в сравнении со студией/clion
Ты хотел сказать божественного vim + grep + find. Такое чувство, что на плюсах писать не умеешь, эти хуилы не могут нормально шаблоны индексировать. А без этого vim + ctags + egrep + find хватает более чем. А учитывая, что студия ещё и не всегда всю иерархию вызовов показывает...
А если ещё scan-build к этому, то все IDE просто сосут хуй.
Ты сам-то чем пользуешься?
>>обоссанного g++
https://gcc.gnu.org/projects/cxx1y.html
Ну ты понел.
хуле он там может? выше примеры программ приводили - говно все, то там панелька как из windows 95, то там тулбар жопный
особенно весело про спермоклоуна - я-то давно уже перекатился на мак, винда только в виртуалочке
плиз ... не сравнивай тормозящее говноподелие от jetbrains со студией
Ну и при чем тут Qt то? То, что хуесосы не могут нормальный интерфейс склепать - проблемы их, а не фреймворка. У меня нормально все получается, нативно, хоть я и не особо уделяю этому внимание.
Как заполнить поля static const struct по дефолту?
[code lang="c++"]struct Yoba
{
int x;
int y;
};
static const Yoba peka = {9000, 100500};[/code]
Спос
>кроме твоей некомпетентности
>внутри него используется (кто бы мог подумать?!) винапи.
Ну охуеть теперь, а что, в программе для windows можно как-то не пользоваться WinAPI?
Вопрос в том, везде-ли он используется и на сколько грамотно, но судя по тому какие выходят программы используется он далеко не идеально.
>>523194
>Ну и при чем тут Qt то? То, что хуесосы не могут нормальный интерфейс склепать - проблемы их, а не фреймворка
Правильно, сначала напиши хуйню, а потом говори то, что только до этого >>522481
написали.
Ты заебал, манька. Ты гонишь на инструмент, когда проблема не в нем, я тебе поясняю, что проблема в спермоклоунах, не могущих в этот инструмент. Что тебе еще не нравится? Съеби в ужасе, блять.
||=== Build: Debug in winsock (compiler: GNU GCC Compiler) ===|
ld.exe||cannot find -lws2_32.lib|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Начало кода:
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
Среда CodeBlocks. Библиотеку в настройках линкера подключил. Ну то есть lws2_32.lib эту. ЧЯДНТ?
-------------- Clean: Debug in winsock (compiler: GNU GCC Compiler)---------------
Cleaned "winsock - Debug"
-------------- Build: Debug in winsock (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -g -c E:\termophisx\Sourses(pc)\C++\internet\winsock\main.cpp -o obj\Debug\main.o
E:\termophisx\Sourses(pc)\C++\internet\winsock\main.cpp: In function 'int main(int, char)':
E:\termophisx\Sourses(pc)\C++\internet\winsock\main.cpp:129:40: warning: passing NULL to non-pointer argument 2 of 'void CreateThread(LPSECURITY_ATTRIBUTES, DWORD, LPTHREAD_START_ROUTINE, PVOID, DWORD, PDWORD)' [-Wconversion-null]
&client_socket,NULL,&thID);
^
E:\termophisx\Sourses(pc)\C++\internet\winsock\main.cpp:129:40: warning: passing NULL to non-pointer argument 5 of 'void CreateThread(LPSECURITY_ATTRIBUTES, DWORD, LPTHREAD_START_ROUTINE, PVOID, DWORD, PDWORD)' [-Wconversion-null]
mingw32-g++.exe -o bin\Debug\winsock.exe obj\Debug\main.o -l ws2_32 "..\..\..\..\..\Program Files\CodeBlocks\MinGW\lib\libws2_32.a" "..\..\..\..\..\Program Files\CodeBlocks\MinGW\lib\libwsock32.a" "..\..\..\..\..\Program Files\CodeBlocks\MinGW\lib\libws2_32.a" -lws2_32.lib "E:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a"
e:/program files/codeblocks/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lws2_32.lib
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 6 second(s))
1 error(s), 2 warning(s) (0 minute(s), 6 second(s))
Вот все что вываливается
>Вот все что вываливается
Лол, ты как твой батя говоришь. Он кстати это говорил когда твоя мама вернулась из тура по Грузии)
Блджадь я делаю он пишет неправильно, 4 ошибки, скобочки не там то то не тут то.
Кодь в MVS бесплатном или быдлере, нехуй всякую еботу заместо иде использовать.
Гугл выдаёт хуйню. Самому писать лень, пока не убедился, что нет такого.
Потому что твоя мать шлюха
Цлион же
В настройках проекта, где либу подключать
В первой колонке:
ws2_32
Во второй: -static
Мимокрокрдил, когда то на лабах было такое
MSVS2010EE
Оба платные, VS Express Edition не может в расширения.
Что лучше выбрать:
1. QT
2. C++ Builder
Кроссплатформенность не нужна, достаточно винды.
С Delphi не сталкивался никогда, да и не хочется.
Resharper for C++
я вопрос как-то неправильно задал или ты пес на суете?
С подливой.
Т.е. не доп либы, а дотнятинку.
while ((friend_sex != 'm') || (friend_sex != 'f'))
{
cin >> friend_sex;
}
Хочу сделать проверку - если friend_sex != 'm' или friend_sex != 'f', то чтобы я вводил его, пока я не введу f или m. Но в моём случае даже если я ввожу f или m - всё равно не продолжается скрипт.
А сколько по времени? Весь день свободный. Вместе с ООП. Хочется на юнити что-нибудь сделать.
Можно без привязки к типе чар
Потому что тут ты сравниваешь не char, а char*. А на прошлом пике было char, из-за этого и работает. Узнай разницу между 'm' и "m".
>Спасибо, так работает, но почему? У нас же одинаковые выражения, просто, в твоём случае не вынесено на скобки?
>Кстати, ты что, монитор фоткал?
>>523988
Скорее всего вся лабуда в приоритетах операций. Да,сижу через 2ч браузер на ведре.
Aide на ведре уже умеет крестовые хеллоу ворлды компилировать.
Не совсем понял?
Мне в задании написали:
>Объявите переменную типа char
Я пробовал в одинарные ковычки ставить чар, мне писало ту ошибку - вроде одинарные ковычки меняют тип чара во что-то другое?
Я сам изучал несколько лет назад пхп и неплохо его знаю, помню что в двойных работает код, в одинарных нет.
Я знаю, просто, я хотел вайлом сделать так, чтобы если кто-то ввёл не ф или м, то надо было заново вводить.
Я имею в виду сравнение корректное. У тебя внизу вон и вайл закоменчен правильный. Короче поменяй на одинарные ковычки.
Там не || должно быть, а &&. Я, как обычно, сперва не заметил. Олсо если ты сравниваешь с std::string, то работай с "m", да.
У тебя условие заведомо всегда выполняется. Потому что либо пол не равен m, либо пол не равен f, либо не равен обоим. Поменяй || на &&.
Ну пущай возьмет да начнет пилить гуйцы там, или хрень какую с сокетами, или с базами, или с gpu. Просто возьми интересующую тебя тему, придумай таск и вперед.
А реально ли заюзать WPF или Windows Forms в mingw, и есть ли примеры?
Я хочу от дома дойти до Германии, весь день свободный, сколько времени это займет? Хочу стать немцем.
int fontHeight = -MulDiv(Size, pixelsPerInch, 72);
int SetMapMode(HDC hdc, int fnMapMode);
логические единицы и т.д.
что все это за хуйня?
В юнити сложность не в самом знании языка, там надо знать саму среду. То есть можно знать основы шарпа и js, и просто искать готовые скрипты и исходя из них уже делать что то свое.
>вроде одинарные ковычки меняют тип чара во что-то другое?
'а' это переменная типа char, а не чаровский массив, который строка. только 1 символ может быть в ' '
"a" это уже строка типа char *, потому что в си нет стрингов, и строки там работают через указатели на элементы чаровского массива.
студия
1 год ушел на JAVA, если в ООП хорошо шаришь, то напишешь свою первую игру за день.
qt
Почему-то не работает постфиксная форма, хотя сделал как написано в книжке, путем добавления (int) в конец строки с ключевым словом operator.
Результат работы проги:
>Задаем значение объекта t1
13:15:45
>Задаем значение объекта t2
12:21:8
>Результат сложения t3 = t1 + t2
1:36:53
>Результат ++t1
13:15:46
>Вычисляем t3 = t1++, выводим t1 (верное значение)
13:15:47
>Выводим t3 (неверное значение, должно быть 13:15:46, т.к. типа постфиксная форма "++" в присваивании
13:15:47
>Результат --t2
12:21:7
>Вычисляем t3 = t2--, выводим t2 (верное значение)
12:21:6
>Выводим t3 (неверное значение, должно быть 12:21:7, т.к. типа постфиксная форма "--" в присваивании
12:21:6
Никак не пойму, где косяк?
А что именно непонятно?
Объект класса Time это типа время, три поля: часы-минуты-секунды. Для операций над этим объектом время преобразуется в одно значение -- секунды, к нему че-нить прибавляется или отнимается, потом обратно преобразуется в часы-минуты-секунды.
Сжать свой анус. Что, эта хуета строго линкуется при компиляции? Или это: графен - тут размер не важен.
Я вроде разобрался, но, честно, не ожидал, что можно сделать так по-ебанутому.
Посмотрев на другие примеры и на решения других аффтаров этого упражения, я пришел к выводу, что если мы хотим перегружать именно постфиксную форму, то надо в коде перегруженного оператора использовать постфиксные выражения инкрементирования.
Т.е., сука, надо писать не i = i + 1, return(i); а именно , сука, return(i++);
Честно, у меня просто нет слов от этой ебанутой логики. До сего момента я понимал, в целом, всю инфу, касательно языка-синтаксиса. А просто в ахуе.
Никакого особенного гуя нет - гуй нативный на вид.
>надо писать не надо писать не i = i + 1, return(i); а именно , сука, return(i++);; а именно , сука, return(i++);
Потому что i = i + 1, return(i); это тоже самое что и return(++i);
Я еще раз разобрался, после того, как в первый раз разобрался, лол.
В общем, стал жертвой своей невнимательности.
Хороший урок на будущее.
Отличаются ли чем-нибудь с практической точки зрения (кроме наличия/отсутствия деструктора) thread_local указатель и thread specific storage (функции tss_… в c11 и pthread_key_… в posix)? Для чего вообще в стандарт добавили tss_... , если есть thread_local? Что лучше использовать?
Как ты собрался перегружать инкремент объекта класса просто написав i++ к одной переменной?
>надо писать не i = i + 1, return(i); а именно , сука, return(i++);
Это вообще разные вещи.
i = i + 1;
return i;
это префиксный инкремент. А
return i++;
постфиксный
Мне непонятно, почему "префиксность" и "постфиксность" перегруженной операции завязаны на "префиксность" и "постфиксность" кода оператора. Нахуя так делать? Вот же есть ключевое слово (int), пусть оно и указывает на форму инкремента, независимо от того, что там в коде оператора. Я так полагал, что это самое (int) указывает, что надо сперва присвоить значение переменной/объекту слевы от знака "=", а потом уже проводить вычисления над инкрементируемой переменной/объектом. Либо я что-то не до конца понимаю, либо это какой-то пиздец.
Если ты перегружаешь постфиксный/префиксный оператор, то логично, что и код должен быть соответственный?
Ты запутался. Дело не в форме кода оператора. (int) указывает на то что перегружен постфиксный оператор, больше нихуя он не делает. Если в коде встречается ++t то вызывается operator++ если t++ то operator++(int), все. Постфиксный оператор должен возвращать неизмененное значение . Выражения i = i + 1, return(i); и return(i++); не равноценны. Первое возвращает увеличеное на 1 число. Второе возвращает неизмененное число (и увеличивает его на один). В коде постфиксного оператора инкремента нужно сохранить старое значение, увеличить на еденицу, и вернуть сохраненное сторое значение. Твой operator++(int) должен выглядеть примерно как:
Time operator++(int) {
\t Time temp(h,m,s);
int seconds = (h 3600) + (m 60) + s;
seconds++;
h = seconds / 3600;
m = (seconds - (h 3600)) / 60;
s = seconds - (h 3600) - (m * 60);
if (h > 24) { h -= 24; }
return temp;
}
>Мне непонятно, почему "префиксность" и "постфиксность" перегруженной операции завязаны на "префиксность" и "постфиксность" кода оператора. Нахуя так делать?
Блять потому что это логично? Нет? А если ты перегружаешь, к примеру, оператор == тебя не будет смущать что он же будет использоваться в коде перегрузки?
>Вот же есть ключевое слово (int), пусть оно и указывает на форму инкремента, независимо от того, что там в коде оператора.
Так и есть. Если ты хочешь можешь сделать чтобы префиксный инкремент добавлял к переменной 1 а постфиксный 2. Да вообще все что угодно можешь туда написать.
Никогда в жизни не работал с сетью на крестах, но очень хочется.
Сокеты там, http и всякие свистелки. Подскажите, пожалста, где можно найти статьи, а может даже есть какая книга по всему этому делу?
нашел вот такую книгу - "Boost.Asio C++ Network Programming" John Torjo. Как она ваще?
Изучаю по Страуструпу, начинаю делать 1 задания, но у меня возникает ошибка, или, скорее я не знаю как сделать:
Я хотел сделать так, что если вводишь что-то кроме f или m, то выдавало бы ошибку.
Я сделал такую конструкцию:
while ( (friend_sex != 'm') && (friend_sex != 'f') )
{
cin >> friend_sex;
cout << "Enter f or m: ";
}
Но! В этом случае если я верно - идёт следующий шаг, но cout всё равно выводит "Enter f or m: ", что я не так сделал? Ввёл f например, а конструкция выводится. Номер 1 на пике.
Кстати, если ввести слово, то выводится столько этих конструкций, сколько символов в фразе.
Код: https://ideone.com/X6yDih
do { } while(); используй.
ну поцаны)
Когда нажимаю любую клавишу то начинается спам текстом.
Хотя, вроде не должно, даже если нажимаю k or m.
Ну ты смотри, вводишь то перед циклом символ и если он не k || m, то начинает тупо флудить cout'ом, разве это не очевидно?
Зачем тебе вообще там цикл? Почитай внимательно что у тебя написано в while. Там будет true что бы ты не нажал. Поэтому и получается бесконечный цикл.
Хедер: https://ideone.com/tnWS3d
Сорец: https://ideone.com/8bbz5v
Правильно ли я начал реализовывать методы шаблонного класса? Что я делаю не так в последнем методе? Ошибка:
error C2664: Item::Item(const Item &): невозможно преобразовать параметр 1 из "Item " в "const Item &"
1> Причина: невозможно преобразовать "Item " в "const Item"
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
Сделай вот так:
char a;
\twhile (1){
\t\tcin >> a;
\t\tif (a == 'k' || a == 'm') break;
\t\tcout << "Vvedite k libo m!" << endl;
\t}
Ебанутая доска.
Ставишь брейкпойнт, запускаешь в режиме дебага, когда программа останавливается, идешь построчно и мониторишь значения переменных
Можешь запустить экзэшник из консоли и перенаправить вывод в файл? Хуй знает что у тебя за проблема. Это у тебя консольная графика должна быть из книги лафоре?
http://aliev.me/runestone/index.html
Отличное оглавление. Есть точно такое же чтобы и с разбором алгоритма решения и с реализацией только для С++?
Есть книга для самых основ алгоритмов? Чтобы если ничего не знаю с нуля мог изучать эти алгоритмы. Только чтобы обязательно были решения на С++.
>Через cmd?
Да.
>А это как?
В винде это вроде делается так. file.exe>file.txt Перед этим зайди в папку с экзэшником. Если не сработает попробуй .exe убрать и/или start в начале приписать.
Это скорее всего не поможет. Просто интересно будет ли такая ошибка если консоль не трогать и как консольная графика ведёт себя с файлами.
> Что-то похожее ведь сделали
Да.
> Как это называется
С++ и Objective-C (старые трансляторы)
> почему оно ещё не вытесняло С
Там где используется С ООП нинужно. Там где нужно ООП можно навернуть джаву или шарп.
> Какие отличия Objective-C
Отличия минимальные, добавлена только работа с объектами (определение объекта, посылка ему сообщений, протоколы и категории). Правда большинство кода как раз и состоит из ебли объектов, по-этому objC код мало похож на сишный. Ну и там по мелочи есть импорт, литералы. Добавлены блоки (лямбда/замыкания) - но это эпловское расширение языка С. И все. А swift он по синтаксису ближе к С но в общем дальше ушел, так как более современный.
Т.е. в случае ИЛИ - если есть хоть 1 ТРУ, то команда проходит. Не проходит только если все ФАЛС.
В случае И - если хоть 1 ФАЛС, то автоматом не проходит команда.
Так?
if (symbols_select == 'd')
{
double val1;
double val2;
}
if (symbols_select == 'i')
{
int val1;
int val2;
}
val1 = 0;
val2 = 0;
Но в этом случае пишет что там где val1 = 0; что она не объявлена еще на стадии запуска программы.
Но у меня дальнейший код настроен так, чтобы работать и с даблом или с интеджером.
Получается мне его 2 раза копировать и каждый в свой ИФ кинуть?
Почитай про области видимости. То что ты хочешь сделать можно только классом навернуть, ну или в зависимости для чего может юнион еще подойдет.
Ой, немного не так, в общем такой код:
balance = num % 2;
if (balance != 0)
{
cout << "test";
}
Если тест в одиночных кавычках, то выдавало это число.
Я понял что вы мне поясняли в прошлый раз - в двойных кавычках получается как массив чара, в одиночных - 1 символ, так?
Я, просто, не совсем понял как это работает - т.е. ковычки ВСЕГДА чар?
Чот в голосину с тебя. Тебе в варнингах ничего не выдали? cout конечно умный, но не настолько, чтобы ты разбрасывался кавычками как тебе угодно.
Я как раз читаю, но не оскорбляй меня - все профессионалы начинали когда-то. К тому же лучше глупый вопрос, чем вообще ничего.
Лучше читать учебник, хуесос. Ты задаёшь не глупые вопросы, ты просишь пересказать учебник. Гугли что такое литерал, строковой литерал и.т.п.
Вон из профессии
Ну так а чем по твоему является строка?
Спасибо. Последний вопрос. Что нужно почитать/освоить чтобы на программировании контроллеров на С можно было зарабатывать?
Работает со всем, для чего определены std::begin и std::end, возвращающие хотя бы forward-итераторы.
Разбираться в электронике и ЦОС.
Знать, как работает периферия в М.П.
Задача сделать FSK модем на 16/32 битном М.П. с исправлением ошибок тебя не должна пугать. Это высокий уровень.
easyelectronics.ru
Начинай с 8-ми битных AVR.
Далее переходи на STM32.
Далее пытайся выполнять заказы с electronix.ru
>Есть способ этому учиться не покупая этих железячек?
Невозможно. Заказчик тебе пришлет макет, под который надо прошивку сделать - а ты проц впервые видишь и не понимаешь куда припаять вот это туда. Готовь деньги, паяльник и прямые руки. Сэкономить на отладочных платах сложно, но можно.
Хорошая плата для STM32 стоит 100€. Для AVR дешевле существенно.
А в принципе всё это копейки.
Имеет смысл пощупать процы MSP430.
Жаль. Тогда на чём можно зарабатывать зная С++? QT выучу и можно на фриланс/работу потом?
Можно и на кутях.
Занимайся тем, что тебе нравится.
Хоть в энтерпрайз на джаве, хотя это очень уныло.
{
Object object1(67);
Object *object2 = new Object(67);
}
Какие из них будут удалены после выхода за область видимости?
Первый. Второй потеряешь но память будет занимать. Если у класса нет деструктра первый пропадёт?
Первый создастся на стеке и будет удален по выходу из функции.
Во втором случае на стеке создан будет указатель, а сам объект в куче. Указатель по выходу из функции так же будет утерян.
Диструктор нужно для класса писать?
НОВЫЙ ТРЕД
https://2ch.pm/pr/res/525225.html
https://2ch.pm/pr/res/525225.html
https://2ch.pm/pr/res/525225.html
Конечно.
http://www.youtube.com/watch?v=CF5YMeW0SSw
Just some text.
Nothing is highlighted, it is just kept monospace, preserving the
spaces and special symbols.
[/code]
Нихуя не пойдет. Пиздец какой-то.
Это копия, сохраненная 27 сентября 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.