• Почему вызывается приватный конструктор копирования?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Он там не вызывается. Этот приватный конструктор используется в функции
    void lib::LinkedList<T>::push(const T&) [with T = Item<int>]
    , которая в шаблоне (там где вы создаете Node* tmp). При первом обращении к этой функции компилятор пытается ее инстанциировать и натыкается на эту проблему, о чем и сообщает вам. Пока эта функция вообще никак нигде не используется - программа компилируется.

    В приведенных вами примерах вы эту функцию так или иначе трогаете разными способами.

    lib::LinkedList<Item<int>> list = lib::LinkedList<Item<int>>()
    вызвает проблему пока у вас есть virtual метод в интерфейсе, потому что это тут вызывается конструктор копирования (сначала конструктор по умолчанию для временного lib::LinkedList<Item<int>>(), а потом это все копируется в конструируемый list).

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

    Если вы напишите lib::LinkedList<Item<int>> list() - то все скомпилируется, потому что конструктор по умолчанию, видимо, не требует знания о методе push. Также удаление virtual или наследования вылечит эту проблему.

    Далее, точно по этой же причине не скомпилируется list.push(a) - это прямой вызов этой запретной функции. Если же вы напишите list.push(Item<int>()), то оно скомпилируется потому что тут вызывается push с перемещением.

    Но для исправления этого кода вам надо прежде всего избавится от этой поломанной функции push.
    Ответ написан
    3 комментария
  • Как разбить объявление класса и его реализацию?

    @12rbah
    Хотел бы добавить информацию к ответу выше, т.к. поддерживать специализации бывает не очень удобно, то можно сделать отдельный файл с определениями функций шаблонов, для указания того, что там лежат именно шаблоны расширение у таких файлов ставят ".inl". Но есть особенность, которая заключается в том, что этот файл подключается в конце, выглядит это примерно так:
    #ifndef example
    #define example
    
    template <class T>
    class A
    {
    //....
    }
    
    //в этом файле лежат определения шаблонных функций для A
    #include "template.inl"
    
    
    #endif
    Ответ написан
    Комментировать
  • Как выводить строчку, на которой было выброшено исключение?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Есть замечательная функциональность: https://en.cppreference.com/w/cpp/utility/source_l...
    Доступна начиная с C++20. Буду образовывать заодно и местных экспертов :)
    Ну или макросы.
    Ответ написан
    Комментировать
  • Как разбить объявление класса и его реализацию?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вообще тут есть другая проблема, с которой вы столкнетесь. Если у вас определение шаблона и реализация в разных файлах, то будут ошибки на этапе линковки. Компилятор, когда будет обрабатывать cpp файл не увидит никаких использований шаблона и с чистым сердцем не сгенерирует никаких его специализаций. Потом линкер не сможет найти нужную реализацию и ругнется.

    Чтобы это исправить нужно или засунуть все в h файл, или в cpp файле прописать специализации шаблона со всеми типами, которые где-либо еще используются, вот так:
    using A<int>;
    using A<double>;
    // etc


    Далее, как именно и зачем вы хотите этот внутренний класс скрыть?
    Иногда вам может быть достаточно сделать член этого типа private и все. Факт того, что кто-то где-то сможет завести переменную этого типа обычно не является проблемой. Для списка уж точно. Если же это проблема и внутренний класс является friend внешнего и что-то такое делает, что нарушает инкапсуляцию (например при учнитожении, что-то меняет в родительском классе), то просто сделав вложенный класс private, вы ничего не добъетесь. Переменные этого типа все-равно можно будет использовать и к ним обращатся (иногда через хаки). Обычно у внутренних классов просто делают приватным конструктор и нужные методы и прописывают внешний класс как friend. Тогда вы в самом классе сможете переменные этого типа создавать и использовать, но никто снаружи ничего с ним сделать не может.

    И кстати, в вашем случае вам совсем нет смысла делать вложенный класс шаблоном. Он уже в шаблоне же, просто используйте внутри тип T.
    Ответ написан
    Комментировать
  • Как сделать анимацию "плавания" облаков?

    AndrewMarty
    @AndrewMarty
    HTML - верстальщик
    Вот мой пример, не знаю такой ли результат вам надо(Прокрутите вниз)
    Ответ написан
    4 комментария
  • Зачем нужны 4 раздела диск 0?

    @kalapanga
    Если чёткого понимания назначения каждого раздела нет, и стоит задача всего лишь создать ещё один раздел D, то лучше эту мелочь не трогайте. Места выиграете чуть-чуть, а есть вероятность сломать загрузку. Как уже сказали, просто создайте новый раздел в нераспределённой области (Раздел C, кстати, я бы предварительно увеличил хотя бы до 150Гб)
    Если всё-таки от этих непонятных разделов страдает чувство прекрасного и нафиг не нужен раздел восстановления от производителя ноутбука, то я бы просто переустановил винду. При установке удалил все существующие разделы, задал желаемый размер диска С и согласился на создание виндой нужных ей разделов. Диск D можно создать потом в оставшейся области.
    Должно после установки получиться примерно так:
    ~500МБ - Раздел восстановления
    ~100МБ - Системный раздел EFI
    Сколько выделили - Ваш раздел C
    Что осталось - Нераспределенная область. В ней потом создать раздел D
    Перед сносом существующей винды убедитесь, что у вас есть все необходимые драйвера для вашего ноута (скачайте с сайта производителя и сохраните куда-нибудь на флэшку)! Ну и собственно установочную флешку создайте.
    Ответ написан
    Комментировать
  • Зачем нужны 4 раздела диск 0?

    mindtester
    @mindtester Куратор тега Windows
    https://www.youtube.com/watch?v=Dn9_ogWhk9s
    совсем коротко:
    - раздел для загрузки EFI биосом
    - раздел собственного загрузчика BCD
    - раздел с резервной копией основных системных фалов
    - раздел для работы
    - судя по вашему скрину, в конце диска резервная копия одного из скрытых разделов. наблюдал такое при обновлении ОС (вин 10, достаточно редко, но и не один раз). какой раздел бекапится, вникать было лень, а потребности не возникало

    вин 10, все еще можно насильно поставить на один раздел, если разметить диск предварительно как один раздел NTFS, если биос настроен загружать legacy (старый режим, не EFI). но легко понять, что масса всяких ну очень системных файлов, сразу попадает в зону риска при сбое любого рода

    ps зато на много проще перенос между дисковыми носителями. типа с харда на ссд, потом на другой ссд. и подобное. ну и если мультибут с достаточно консервативными версиями линукс. но сейчас вроде уже все линуксы научились грузиться в EFI
    Ответ написан
    Комментировать
  • Зачем нужны 4 раздела диск 0?

    @res2001
    Developer, ex-admin
    Вин10 использует для своей работы не только диск C:, но еще и другие вспомогательные разделы, которые по умолчанию не монтируются.
    Почитайте что-нибудь о разбиении диска виндой, например эту статью: https://www.cnews.ru/news/top/2020-07-13_ustanovsh... (просто в гугле первая ссылка)
    Так что просто так удалять разделы не советую - рискуете тем, что комп перестанет загружаться.
    Кроме того производители ноутов любят устанавливать "из коробки" свое собственно ПО для восстановления системы "одной кнопкой". Обычно это восстановление достигается за счет использования не смонтированного раздела, куда делается какой-то бэкап. Часто эти схемы никогда не используются или вообще не работают и возможно ПО уже удалено из винды, но раздел на диске так и висит никому не нужный.
    Ответ написан
    Комментировать
  • Зачем нужны 4 раздела диск 0?

    Dagzio
    @Dagzio
    System administrator
    Удалять не нужно, это системные разделы, на которых хранятся точки восстановления и прочее ( системное) при удалении этих маленьких разделов полететь может винда, просто создавай новый том с не распределённой области (чёрные)
    Ответ написан
    Комментировать
  • Зачем нужны 4 раздела диск 0?

    fzfx
    @fzfx
    18,5 дм
    Если вкратце, разделы нужны для корректной работы ОС. Если бы вы растянули окно диспетчера дисков вширь, то могли бы заметить в скобках описания назначения разделов.
    Вы их можете попробовать удалить, но все проблемы, которые могут от этого возникнуть, я вам перечислить не возьмусь. По идее удаление разделов может сломать функционал восстановления Windows, функционал обновления Windows, функционал Bitlocker, режим SecureBoot.
    При наличии 391 ГБ свободного места лично я бы не упарывался в попытки избавиться от данных разделов, поскольку это не имеет никакого смысла (впрочем, если стоит задача сломать систему, то смысл безусловно есть).
    Ответ написан
    2 комментария
  • Как сделать анимацию заполнения границы круга против часовой стрелки?

    @MamaLuyba
    Wrapper-у делаешь transform: scaleX(-1) и всё
    Ответ написан
    Комментировать
  • С опытом приходит или просто тупой?

    yarkov
    @yarkov Куратор тега JavaScript
    Проект "Жизнь после смерти" - lifeafterdeath.ru
    Ну ваш код это что-то типа страницы из азбуки JS =) Конечно он с ходу распознается.
    А то, что вы в консоль лезете проверять - абсолютно нормально и все так делают.
    Невозможно все свойства и методы заучить наизусть.
    Ответ написан
    Комментировать
  • Стоит ли в JavaScript использовать a++?

    Stalker_RED
    @Stalker_RED
    Да, это нужная штука, и по моим наблюдениям постфиксная встречается значительно чаще, чем префиксная.

    Постфиксная возвращает текущее значение, и потом уже увеличивает переменную. Префиксная, сперва увеличивает, и возвращает уже увеличенное.

    GL3DHGA.png
    spoiler
    let i = 0, zzz = 'abcdef'
    while(i < zzz.length) {
      console.log(zzz[i++])
    }
    Ответ написан
    1 комментарий
  • Как обратиться к объекту в сss?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    Как вариант так ;) на костылях https://jsfiddle.net/9zsc7b9L/
    Ответ написан
    1 комментарий
  • Нужны ли атрибуты async и defer в применении на практике?

    SPAHI4
    @SPAHI4
    реактовцы - это не девы, а прокидыватели пропсов
    Нужны для подключения сторонних библиотек, не влияющих на загрузку страницы, например, google analytics.
    Ответ написан
    Комментировать
  • Нужны ли атрибуты async и defer в применении на практике?

    @EEclipsEE
    вот у вас допустим весь дом в body начинает генерироваться динамически и какой-нибудь скрипт обращается к элементу x. Но вот проблема элемента еще нет, и тут не помещение в head или body вам не помогут. defer нужен.
    а async не плохо так ускоряет загрузку страницы если знать куда пихать. Например один скрипт красит ссылки в красный цвет, а другой параграфы в зеленый, и допустим у нас всего это овер до***я. Так зачем ждать пока ссылки покрасятся и потом параграфы если они не связаны? Скрипты моно пустить параллельно сэкономив время загрузки.

    P.S. Примеры грубые, но наглядные.
    Ответ написан
    Комментировать
  • Почему так странно работает transform: scale в css?

    rockon404
    @rockon404
    Frontend Developer
    Это не scale странно работает, а вы transform переопределяете.
    было:
    transform: rotate(90deg);
    после :hover стало:
    transform: scale(1, 2);

    чтобы rotate сохранить надо так переопределять:
    transform: rotate(90deg) scale(1, 2);
    Ответ написан
    Комментировать
  • Как обратиться к объекту в сss?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    Пока такое невозможно, но в четвёртой версии спецификации появится:
    li:has(~ .hover:hover) {
      color: red;
    }
    Ответ написан
    Комментировать
  • Почему происходит несоответствие некоторых символов при верстке, хотя шрифт скачан тот же, что и в макете?

    BojackHorseman
    @BojackHorseman Куратор тега Веб-разработка
    ...в творческом отпуске...
    да это вообще разные шрифты) ваш браузер явно не знает про тот шрифт, который вы ждете) если это нестандартный шрифт, то нужно передавать со страницей
    Ответ написан
    Комментировать