На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> синтаксическая ошибка: отсутствие ";" перед "="
    Цитата
    уберите точку с запятой в конце строки и все у вас получится

    Уже убрал. Была ошибка не хватает ; - я почему-то подумал что на этой строке.

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

    Я эти
    Цитата
    относительно новые фишки языка
    имел в виду во всех смыслах этого слова, С++ никогда не славился совместимостью между компиляторами, некоторые баги (или фишки) популярных компиляторов даже были темой олимпиадных задач в студенческие годы. Так теперь развелось десяток стандартов языка, и одни компиляторы не понимают код, написанный под другими. И вещь не связана ни с чем критически важным, как например разница между Delphi 7 и более новыми версиями (переход на юникод), просто раньше был один способ реализации какого-то кода или объявления какой-то структуры, а сейчас их 10 разных, из которых половина понимается только MSVS и только последними версиями...

    Цитата
    Пример кода неверный. Плохо соответствует реальному

    Я только переименовал переменные и убрал куски кода между {} к которым не возникают вопросы.

    Цитата
    VS2019 всё ещё умеет работать на любых Win7 с SP1
    Это очень полезная информация. Видимо, буду так делать. Потому как у меня есть готовая виртуалка с семеркой, но когда я на нее пытался ставить очередную дрянь, вылезла неудовлетворенная зависимость (последний .NET) который нагло отказывался ставиться (а код ошибки, судя по китайскому интернету, говорил о том что не хватает одного из "важных" обновлений винды). Пришлось тогда откатывать и создавать еще одну семерку, с образа с RuTracker, в котором все обновления вшиты (что там еще интересного вшито - не смотрел).

    Цитата
    лучше всего снести все версии MS C++ Redistributable
    Их, скорее всего, не будет. ОК.
    Сообщение отредактировано: Виталь -
      Виталь, C++ прошло периоды застоя! Хочешь ты этого,не хочешь - но ты, если прогаешь на С++, обязан отслеживать стандарты! Очень часто есть перелет из "std::experemental" в "std::".

      Цитата Виталь @
      имел в виду во всех смыслах этого слова, С++ никогда не славился совместимостью между компиляторами, некоторые баги (или фишки) популярных компиляторов даже были темой олимпиадных задач в студенческие годы.

      Еще раз!!! Пользуешь "фичу языка" - удостоверься, что твой компайлер тянет этот стандарт.
        Отнюдь, Dushevny. Даже если он так сделает, лямбда кончается раньше использования var2 и var3, и ругаться компилятор не должен. Но ругается, значит этот пример кода не соответствует оригинальному. То ли сама func1() тоже лямбда, то ли баланс {} где-то нарушен, то ли перепутаны переменные. А попробуй не перепутать, когда они называются одинаково и внутри, и снаружи. Очень напрягают const_cast<>ы. Я не вижу использования лямбды и следовательно нет никакой информации о константности её параметра, но даже так выходит, что реализация её контракта грубейшим образом нарушает собственные же гарантии. Тело цикла по current меняет свой параметр вне заголовка. И как будто этого мало, грубым образом нарушая контракты strtoul(): второй параметр неконстантный, первый константный, и когда они совпадают, для strtoul() это может оказаться полной неожиданностью, это прекрасный способ пострелять по конечностям. И что делает C-шная функция, не умеющая к тому же корректно сообщать об ошибках, в плюсовом коде? Почему не std::stoul()?
        Код вроде бы под давние фишки языка, которым 10 лет в обед, но написан безалаберно. 100пудово индус писал. Если Виталь его портирует, пусть хоть в порядок приведёт, чтоб работало не на соплях.

        Добавлено
        Цитата Виталь @
        Так теперь развелось десяток стандартов языка, и одни компиляторы не понимают код, написанный под другими.
        Не слушай ничьих бредней. Есть Стандарт языка, и он одинаков для всех. Некоторые компиляторы, существующие на рынке десятки лет, могут поддерживать старые Стандартные решения для совместимости со старыми программными продуктами, но такое обычно настраивается. Другое дело, что компиляторы могут также вводить некие расширения Стандарта. Они естественно могут не поддерживаться другими компиляторами. Но на то они и расширения. Если хочешь портабельности, расширения языка в коде использовать нужно ограниченно и локализовано, а не где попало по всему коду.

        Добавлено
        Цитата Виталь @
        просто раньше был один способ реализации какого-то кода или объявления какой-то структуры, а сейчас их 10 разных, из которых половина понимается только MSVS и только последними версиями...
        Ну, 10 — это ты загнул. Нынче строку в число преобразовать можно тремя Плюсовыми способами и тремя (по Стандарту – двумя) Cшными. Каждый имеет свои плюсы и минусы. std::stringstream удобнейший, включая поддержку национальных предпочтений, но накладный, std::num_get<> неудобный, но значительно быстрее, строковые std::stoXX() самые быстрые, но работают только в C locale classic. Выбирай на вкус, что называется. Cшные по-любому нерекомендованы из-за типовой небезопасности и ненадёжной индикации ошибок. "Только MSVS" означает скорее всего лишь то, что код завязан на MSные расширения языка. Хорошо это или плохо, сказать трудно; однозначно плохо, когда использующий их программер не отличает их от Стандартных конструкций. Если ты думаешь, что у GNU меньше расширений, то вынужден огорчить, их там ещё больше, чем у MS.

        Добавлено
        Цитата Виталь @
        Это очень полезная информация. Видимо, буду так делать. Потому как у меня есть готовая виртуалка с семеркой...
        Дома на 10-ой ПРОшке проблем с 2017-ой точно нет. На работе стоит корпоративная 7-ка, и там она тоже как влитая работает без нареканий. 2017-ая тоже нынче поддерживает C++17 отлично (не буду говорить "безукоризненно", боюсь соврать), так что и она вполне, думаю, тебе подойдёт. За 2019 ничего сказать не могу, не юзал, но однозначно не должна быть хуже, и я почти уверен, что почти готовый C++20 в 2017 если и поддержат, то развивать точно не будут.
          Цитата Qraizer @
          Не слушай ничьих бредней. Есть Стандарт языка, и он одинаков для всех.

          Категорически не согласен - не слушай его!!! Мы имеем Стандарт в виде "нотаций", а-ля "будет так". А компиляторы, со своими реализациями - мы имеем в виде данности! Используя тот или иной компилятор (его версию) ты пассивно соглашаешься на использования "ЧАСТИ СТАНДАРТА" (а может и полной, а может и нет) который он декларирует! Может все, а может и не все. И Мелкомягкие - не всегда в тренде!
            Пошел качать 2017й. Ну это просто негативный опыт компиляции чужих кодов. Еще лет 10-15 назад "код из интернета" на С или С++ пытался скомпилировать в каком-то MSVC, Symantec C++, GCC и чем-то еще и ничего не получилось. Потом более-менее освоил студию 2008 и 2010 - в них хотя бы можно работать и были проекты с открытыми исходниками, которые без танцев с бубном собирались на этих версиях (я мог вносить правки и собирать под себя). Сейчас бывает что-то на плюсах или шарпах попробую в 2010й или Bloodshed Dev-C++. Другими не пользуюсь, ну не нужно оно мне. А вот эта мода новая публиковать исходники где-то там, на форумах либо гитхабах, и либо файл проекта отсутствует (не понятно на чем оно писалось) либо он сделан на последней студии, и его невозможно конвертировать в 2010й (или есть какой-то софт для преобразования SLN и vcxproj файлов в обе стороны, а не только снизу вверх?)
              Цитата Qraizer @
              Отнюдь, Dushevny. Даже если он так сделает, лямбда кончается раньше использования var2 и var3, и ругаться компилятор не должен.
              От лишней точки с запятой компилятору может снести голову по-разному и он может вывалить кучу совершенно непонятной чуши, никак не связанной с настоящей ошибкой. А var2 и var3 передаются параметрами в охватывающую функцию func1(), так что вполне могут использоваться после тела лямбды, я даже не стал вдумываться в смысл сообщений о них. Это я к тому, что надо сначала убрать явные ошибки, а потом бороться с хитрыми (если они не пропадут).
              Сообщение отредактировано: Dushevny -
                Цитата Виталь @
                Пошел качать 2017й.

                Зря! Почитал бы, что я тебе написал, надо 2019 ... Потом "не плачься что не работает".
                  Посмотрим что выйдет. В связи с тем, что на раздаче мало людей - быстрее всего качается 2015й. Место на винте есть, качаются все 3 сразу (+2017 и 2019). Надеюсь, в установщике не будет такого идиотизма как в последних версиях Delphi RAD Studio, когда весь установщик сначала распаковывается в Temp, потом устанавливается в выбранную директорию (не переносом, а копированием, при этом половина объема всё равно лезет в Program Files, хотя для установки выбирался другой диск) и только после окончания установки очищается Temp)
                  Сообщение отредактировано: Виталь -
                    Цитата Виталь @
                    Посмотрим что выйдет. В связи с тем, что на раздаче мало людей - быстрее всего качается 2015й. Место на винте есть, качаются все 3 сразу (+2017 и 2019). Надеюсь, в установщике не будет такого идиотизма как в последних версиях Delphi RAD Studio, когда весь установщик сначала распаковывается в Temp, потом устанавливается в выбранную директорию (не переносом, а копированием, при этом половина объема всё равно лезет в Program Files, хотя для установки выбирался другой диск) и только после окончания установки очищается Temp)

                    Такое ощущение - что тебе пофиг, что тебе отвечают, время на тебя тратят!
                    Ну и нам на тебя пофиг - плыви дальше.
                      Цитата Dushevny @
                      Это я к тому, что надо сначала убрать явные ошибки, а потом бороться с хитрыми (если они не пропадут).
                      Собственно в первом моём посту эта же мысль.

                      Добавлено
                      Цитата Виталь @
                      В связи с тем, что на раздаче мало людей - быстрее всего качается 2015й
                      Лицензия на 2017 и 2019 разрешает даже организациям с менее чем 250 компов и годовым доходом до $1000000 бесплатно использовать до 5-и установок. На вот, сравни. Качать с торрентов совсем не обязательно. Веб-интсталлер маленький и качает только выбранное. Ставить можно куда угодно, у меня всё стоит на D:, в Program files совсем немного.
                      Сообщение отредактировано: Qraizer -
                        У меня MSVC 2019 стоит на ПЛАНШЕТЕ на Intel Atom-е с 2 Гб оперативкой, Win10 и диском 30Гб, пришлось еще воткнуть внешний носитель SD Card на 64Гб.
                        Полет нормальный.

                        Цитата Виталь @
                        В оригинале был GetModuleHandle, но он выдает error C2664: GetModuleHandleW: невозможно преобразовать параметр 1 из "const char *" в "LPCWSTR" (независимо от того, стоит ли в свойствах использование юникода)

                        В оригинале так же должно быть:
                        TCHAR* name;
                        HMODULE handle = GetModuleHandle(name);
                        Так как он правильно ругается: невозможно преобразовать параметр 1 из "const char *" в "LPCWSTR"
                        Либо (если всегда пишешь в юникоде):
                        wchar_t* name;
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0371 ]   [ 16 queries used ]   [ Generated: 29.03.24, 08:22 GMT ]