Задать вопрос
  • Как исправить ошибку NameError: 'BoolVariable' is not defined при создании c++ сборки в godot-cpp?

    @res2001
    Эту ошибку компилятор выдает при сборке исходников. Ошибка в программе. Надо смотреть исходники. Начать с того места, куда отсылает ошибка и дальше раскручивать.
    Похоже, что переменная используется, но нигде не определена. Надо определить.

    PS: scons не при делах, лучше выкладывать текстом, а не скринами.
    Написано
  • Как увидеть русские символы в обычной строке в отладчике Visual studio?

    @res2001
    Дмитрий Зеленев, Если пользуетесь компилятором с поддержкой C++20, то можете поэкспериментировать с char8_t и u8string. Можно строку читать в массив char8_t, строковое представление делать с помощью u8string_view, а для записи в xlsx преобразовывать указатель на массив в char*. Только, видимо, надо будет озаботится самому наличием завершающего нуля в конце массива.
    Написано
  • Как увидеть русские символы в обычной строке в отладчике Visual studio?

    @res2001
    Дмитрий Зеленев, Для UTF8 нужно использовать wstring. string для однобайтовых кодировок.
    Написано
  • Как увидеть русские символы в обычной строке в отладчике Visual studio?

    @res2001
    Строка то откуда взялась? Из файла? В какой кодировке она в файле?
    Написано
  • Будут ли проблемы с монтированием раздела диска NTFS?

    @res2001
    В линукс ставь Samba client (во многих дистрибутивах стоит по умолчанию) и через него получай доступ к расшаренным с винды ресурсам. Samba - это свободная реализация сетевого протокола винды.
    Написано
  • Git удалил коммит/ы при переключении веток с помощью checkout?

    @res2001
    Может вопрос решиться командой:
    git log --all
    Написано
  • Код должен выводить только те буквы, которые встречались во всех словах, но вместо этого программа резко завершает работу. Что не так?

    @res2001
    Ланской Кирилл, Сложные структуры, работают сложно и соответственно дольше, чем простые, плюс еще используют динамическую память. Выделение/освобождение памяти - очень время затратная операция.
    Массив - самая простая структура в языке.

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

    На счет алфавитного порядка - буквы в ASCII таблице отсортированы по алфавиту (https://www.asciitable.com/), так что просто перебираете все буквы начиная с меньшего индекса и получаете автоматически упорядоченный список букв. Правда это верно только для английских букв, в русских кодировках (их несколько) это не для всех букв работает. Например в CP1251 и CP866, которые есть в винде по умолчанию буква 'ё' выбивается из порядка. В KOI8-R - вообще с этим бардак. Но в задании вроде бы нет условия выводить буквы в алфавитном порядке. Кроме того не известно какая кодировка будет на входе.
    На счет упорядочивания в set - не уверен, что set для charов использует именно алфавитное упорядочивание, скорее всего так же сравнивает по ASCII кодам. А значит упорядочивание будет таким же как с массивом. Но тут можно поиграться с шаблонным параметром Compare для Set (https://en.cppreference.com/w/cpp/container/set), задав в качестве компаратора функцию, которая умеет в алфавитное упорядочивание.
    Впрочем, что-то похожее можно придумать и при выводе букв из массива.
    Написано
  • Код должен выводить только те буквы, которые встречались во всех словах, но вместо этого программа резко завершает работу. Что не так?

    @res2001
    Зачем тут вообще список или еще более сложная структура? Все эти структуры работают с динамической памятью, а это дополнительные временные затраты.

    Вам надо просто посчитать количество вхождений каждой буквы и количество слов и вывести все буквы, где количество вхождений больше, чем количество слов.
    Для хранения счетчиков букв достаточно статического массива фиксированного размера uint32_t[256]. В этом массиве индекс будет ASCII кодом буквы.

    Но с таким подходом есть то же пара проблем:
    а) на сколько понял, первой строкой вы получаете список букв, которые надо посчитать, т.е. не все буквы надо учитывать, а только из списка;
    б) что делать со словами в которых одна буква встречается несколько раз?

    Проблема (б) решается заменой массива uintов на массив структур. Структура примерно такого вида:
    struct {
     uint32_t count_letter;
     uint32_t version;
    }

    count_letter - это счетчик букв, version - это "версия" - просто номер последнего слова в котором была эта буква.
    Перед тем как инкрементировать count_letter проверяете условие: version < current_word_number. Если условие выполняется - инкрементируете и обновляете версию, если не выполняется - значит эта буква в этом слове встречается не один раз и повторно ее не учитываем.

    Проблема (а) решается просто - первое слово, содержащее список букв, просто обрабатываем как обычное слово - инкрементируем счетчик букв и счетчик слов.
    Написано
  • Вызов функций С++ из .h?

    @res2001
    Имя,
    а если я создам C файл с функцией в которую вынесу нужный мне функционал библиотеки

    Перечитал тут ваш последний вопрос и возник встречный вопрос: что значит "вынесу"?
    Скопирую из заголовка в .cpp файл какой-то участок кода библиотеки?
    Это бесполезное занятие.
    В .cpp файле вы должны написать код, который будет использовать шаблонный класс/функцию из библиотеки.
    Т.е. это будет не код библиотеки, а ваш новый код.
    Копи-паст тут не прокатит.

    Подобная обертка для экспорта функционала обычно бывает очень простой, если не сказать элементарной - в вашей функции будет вызываться функция библиотеки, с соответствующими преобразованиями типов.
    Написано
  • Плохо решаю задачи, как повысить квалификацию?

    @res2001
    Это навык как и практически все остальное. Прокачать его можно только тренировками, т.е. больше практики.
    Т.к. вы хотите повысить эффективность своих решений, то просто практики мало. Вы должны решить задачу самостоятельно, а затем погуглить, как решают эту задачу другие люди. Ни в коем случае не наоборот. Может быть собрать чужой код, протестировать производительность вашего и чужого. Попытаться понять чем чужой код более эффективен, чем ваш, изучая исходники.
    Кстати, навык понимания чужих исходников (и это то же навык) очень востребован в больших проектах.
    Написано
  • Вызов функций С++ из .h?

    @res2001
    Имя,
    будет ли весь необходимый код(библиотеки) содержаться в .lib?

    Если абстрагироваться от того, что вы пишете про Си, а нужно С++, то да, в полученной библиотеке на основе вашего кода + кода исходной библиотеки будет содержаться все что нужно. Точнее то что вы экспортируете, то там и будет содержаться.

    Как выше было замечено экспортируемые функции должны быть объявлены как extern C - это директива С++, которая заставляет компилятор не использовать в объектном файле С++ расширения. Это позволяет использовать такую библиотеку в программах написанных практически на любой ЯПе, который умеет работать с Си библиотеками.
    Т.е. снаружи ваша библиотека будет выглядеть как Си библиотека, хотя написана будет на С++.
    Написано
  • Вызов функций С++ из .h?

    @res2001
    Имя, В Си нет шаблонов. Файл вы можете создать любой, компилятору в принципе все равно какое расширение у него будет. Но содержать он должен C++ код и компилятор надо использовать для С++.
    Обычно компиляторы для Си и С++ разные. Разве что микросовтовский cl умеет и то и то, но там свои заморочки, т.к. официально он стандарты Си не поддерживает (по крайней мере в недалеком прошлом так было, давно уже в него не заглядывал), но Си код компилировать умеет.

    Например в gcc надо использовать g++ для С++ кода и gcc для Си кода.
    Написано
  • Вызов функций С++ из .h?

    @res2001
    Имя, Инстанцирование - создание из шаблона реального оъекта подстановкой в шаблон реальных параметров.

    В общем, если в заголовках библиотеки шаблоны, то вам надо написать код на С++, который эти шаблоны будет представлять в реальные объекты. И уже эти реальные объекты, созданные вашим кодом вы можете экспортировать в rust.

    Т.е. шаблонный код - это абстракция, которая сама по себе скомпилироваться и исполняться не может. Но когда на основе этой абстракции будет сгенерирован реальный код/объект - его уже можно скомпилировать, выполнить и т.д. и т.п.

    В С++ инстанцирование шаблонов происходит во время компиляции. Компилятор сам создает реальные объекты, подставляя в шаблон соответствующие параметры.
    Написано
  • Вызов функций С++ из .h?

    @res2001
    Имя,
    правильно ли будет скомпилировать .h файлы в единую .lib и линковать её с Rust?

    Если библиотека на шаблонах, то вы не сможете просто так ее скомпилировать, используя только одни заголовки этой библиотеки.
    Потребуется написать код на С++, который будет инстанцировать нужные в Rustе шаблоны (объекты) и предоставлять их функционал для rust. И уже этот код собирать как свою библиотеку, а не исходную.
    Написано
  • Как уменьшить время компиляции в UE5?

    @res2001
    Я не в теме game dev и UE. Мне кажется, что перечисленные вами варианты не относятся к компиляции С++ кода.

    Если все же относятся, то:
    1. Есть ccache - кэширует работу компилятора. Дает приличное ускорение при повторных сборках. По моему все современные компиляторы умеют с ним работать.
    2. Если собираете с помощью cmake (или другой аналогичной системрй сборки), то можно установить ninja build и использовать соответствующий генератор cmake. ninja то же дает ускорение по сравнению с make.
    3. Если памяти много, то можно сделать RAM диск и заставить компилятор собирать проект на этом диске.
    Написано
  • Как автоматизировать процесс установки программ на 1000 компьютерв?

    @res2001
    Перезаливать ОС теряя официальную винду и ставить корпоративный образ

    У вакс куплено 2 версии винды на 1000 компов? Видимо в конторе много лишних денег, раз так разбрасываетесь. На 1000 компов - это существенные суммы.

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

    Сменить ключ в винде можно без переустановки и превратить например домашнюю в pro, правда там наверняка не хватает какого-то софта. Возможно он подтянется после обновления, а может и нет. Тут я не в курсе, никогда таким не занимался.

    Можно и переустановить. Варианты групповой установки есть, от накатывания эталонного образа, до, например, разворачивания Windows Deployment Services, вроде так это называется сейчас и установки новой винды на компы через PXE загрузку (или с некоторого загрузочного носителя, если биос не поддерживает PXE). Устанавливаемый образ нужно предварительно подготовить, закинув в него файл ответов, где будет прописан корпоративный ключ и т.д. и т.п. Там много чего можно настраивать во время установки через файл ответов.
    Если у вас не будет домена (что само по себе странно, учитывая количество компов), то при установке винды надо как минимум обеспечить чтоб на всех компах был локальный администратор с одним и тем же именем и паролем. Практически все остальные действия на уже установленной винде (зная логин/пароль администратора) могут бы выполнены по сети. Без домена и GPO, это будет достаточно трудоемко на первых порах - нужно будет скриптовать все действия. Впрочем, немного практики и это будет получаться достаточно быстро. Тут даже сторонние утилиты не особо нужны, достаточно имеющихся на борту встроенных средств.

    Бесплатных сторонних инструментов сравнимых по функционалу с AD+GPO нет.
    Платные стоят нормальных денег, а с учетом того, что они либо повторяют либо расширяют функционал AD+GPO, то их необходимость сомнительна.

    У меня был опыт управления не большой сетью без виндового домена. Домен был, но не AD, и у него в плане управления рабочими станциями функционал был достаточно куцый, так что приходилось много чего делать подобным способом.
    Написано
  • Где в Windows хранятся свойства ярлыков?

    @res2001
    путь к рабочей папке содержится уже некорректный

    Это то что называется "текущий каталог" для запущенной программы.
    Этот путь в принципе может быть любым. Правда, некоторые, криво написанные, программы правильно работают только при указании какого-то определенного текущего каталога (например каталога где лежит исполняемый файл). Правильная программа не должна зависеть от этого параметра своего реального окружения.
    Не корректным этот путь может быть только если он физически не существует. Но и в этом случае винда сможет запустить программу с текущим каталогом видимо где-то в %SystemRoot%\system32
    Написано
  • Авторизация на папку в батнике, как реализовать?

    @res2001
    Тимур,
    может ли монтировать диск на батнике

    Диск в батнике можно монитровать и размонтировать с помощью net use /?
    На счет прав доступа смотри ответ kalapanga, я с ним согласен, а так же согласен с тем, что лучше бэкап сначала сохранять на локальный диск и потом копировать отдельно от sqlcmd.
    Написано
  • Авторизация на папку в батнике, как реализовать?

    @res2001
    sqlcmd нормально работает с UNC путями? Я просто не в курсе.
    Просто стандартные виндовые команды cmd не умеют в UNC - надо подключать на букву диска.
    Если sqlcmd дружит с UNC, то ошибка на скрине говорит, что нет доступа. Отсюда вопросы:
    Как запускаете батник? Под каким пользователем? Имеет ли пользователь доступ к сетевому ресурсу?
    Написано
  • Как в excel удалить дубликаты с объединением значений соседнего столбца?

    @res2001
    DENIS Kokorev,
    Только аддоном можно?

    Если операция одноразовая то можно формулами + немного руками:
    1. Отсортировать по сравниваемому столбцу, пусть это будет столбец А, а объединяемый столбец с данными - B. В вашем случае, похоже, что таблица уже отсортирована как надо.
    2. в ячейке С1 водим такую формулу:
    =ЕСЛИ($A1=$A2;$B1&", "& $C2;$B1)
    и копируем ее до конца тоблицы. Эта формула соберет в самом первом вхождении "Березовой рощи" все данные из нижележащих "Березовых рощ" и т.д.
    3. Затем надо скопировать полученный столбец С в себя же или рядом с помощью операции "Специальная вставка"->"Вставка значения". Пусть мы скопируем это в столбец D.
    4. Теперь надо удалить лишние вхождения. Для этого в столбце E в первой строке ставим 1 вручную, во второй строке вводим формулу:
    =ЕСЛИ($A2=$A1;0;1)
    Формулу копируем до конца таблицы.
    Таким образом все первые уникальные вхождения сравниваемого столбца помечаются 1, а последующие нулями.
    5. Ставим автофильтр на столбец Е, фильтруем по значению 0 и удаляем все отфильтрованные строки. Снимаем фильтр
    6. Удаляем все промежуточные колонки, оставляя только А и D

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