на конструктор по умолчанию нельзя ссылаться так как эта функция удалена

Ошибка на конструктор по умолчанию (Visual Studios 2019).

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

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

2 ответа

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

Вот как это сделать для производного класса:

В качестве альтернативы вы можете предоставить аргумент по умолчанию std::string для конструктора базового класса:

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

Любой тип, который наследует это, должен определять конструктор, который вызывает SubstitutionCipher(string) с некоторым значением.

Я могу придумать три способа обойти это:

Вы можете либо указать компилятору, чтобы он сгенерировал конструктор по умолчанию, как в противном случае, через эту строку:

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

Вы можете добавить к Revisedcipher конструктор, который принимает ключевой параметр и передает его базовому классу, например:

Источник

Конструктор по умолчанию & quot; Framework :: Graphics :: Material & quot; нельзя ссылаться — это удаленная функция

Отредактировано: добавлен класс шейдеров.

Я пишу библиотеку DLL, но MS VS intellisense и компилятор жалуются на конструктор Mesh. Если я изменю атрибут материала в конструкторе сетки на текстуру, то все в порядке. Я пытался изменить структуру на класс, но это не сработало. Удаление FFB_FRAMEWORK_API marcro тоже не работает.

Компилятор жалуется прямо перед m_verticies = вершинами

Код серьезности Описание Ошибка состояния подавления строки файла проекта
(активный) E1790 конструктор по умолчанию
На «Framework :: Graphics :: Material» нельзя ссылаться — это
удаленная функция FFB_Framework c: \ Users \ Пользователь \ Documents \ Visual Studio
2017 \ Проекты \ FFB \ FFB_Framework \ Mesh.cpp 7

Ред.
Если я меняю конструктор на

Компилятор выдает эти ошибки:

Код серьезности Описание Состояние подавления строки файла проекта
Ошибка LNK2019: неразрешенный внешний символ «__declspec (dllimport)
public: __cdecl Framework :: Graphics :: Material ::

Кто-нибудь знает где ошибка?

Решение

Вы используете назначение для m_material переменная. Прежде чем войти в тело Mesh Конструктор По умолчанию вызывается конструктор m_material, который удаляется. Вы можете реорганизовать конструктор следующим образом и предоставить соответствующий конструктор для Material

Источник

Ошибка компилятора C2280

«объявление«: попытка ссылки на удаленную функцию

Компилятор обнаружил попытку сослаться на deleted функцию. Эта ошибка может быть вызвана вызовом функции-члена, которая явно помечена как = deleted в исходном коде. Эта ошибка также может быть вызвана вызовом неявной специальной функции-члена структуры или класса, которая автоматически объявляется и помечается как deleted компилятор. Дополнительные сведения о том, когда компилятор автоматически создает default или deleted специальные функции элементов, см. в разделе специальные функции элементов.

Пример. явно удаленные функции

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

Пример: неинициализированные члены данных

Неинициализированный член данных ссылочного типа или const член данных приводит к тому, что компилятор неявно объявляет deleted конструктор по умолчанию. Чтобы устранить эту проблему, инициализируйте член данных при его объявлении.

Пример: ссылочные и константные элементы данных

const Член данных ссылочного типа или указывает компилятору объявить deleted оператор присваивания копии. После инициализации эти члены не могут быть назначены, поэтому простое копирование или перемещение не может работать. Чтобы устранить эту проблему, мы рекомендуем изменить логику, чтобы удалить операции назначения, которые вызывают ошибку.

Пример: перемещаемый удаляет неявную копию

Пример: элементы типа Variant и volatile

Пример: удаленные непрямые базовые члены

версии компилятора до Visual Studio 2015 с обновлением 2 не были согласованы и позволял производному классу вызывать специальные функции-члены косвенно производных private virtual базовых классов. Компилятор теперь выдает ошибку компилятора C2280, когда выполняется такой вызов.

Источник

На функцию нельзя ссылаться, так как это удаленная функция

Здравствуйте, я изучаю C ++ из книги и задаю вопрос ниже

Напишите функцию, которая принимает и возвращает istream&, Функция должна читать поток, пока он не достигнет конца файла. Функция должна печатать то, что она читает, в стандартный вывод. Сбросьте поток так, чтобы он действовал, прежде чем возвращать поток.

Выше приведена моя попытка, однако я получаю ошибки в строке «return iStream».

Я на самом деле не знаю, что это за ошибки, я знаю, что вы можете удалить материал, но я пока не рассматриваю эту тему в книге. Насколько я знаю, я совсем не трогал файл istream … Может кто-нибудь помочь мне, пожалуйста?

Решение

Вы не можете вернуть istream по значению, потому что это не для копирования.

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

просто отключите предварительно скомпилированные заголовки в настройках проекта Visual Studio.

Это также дает вам более стандартное поведение для включений заголовка.

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

Вместо непереносимого чудовища Microsoft

просто используйте стандарт

или в C ++ 11 синтаксис конечного типа возврата,

просто запустите вашу программу через Ctrl + F5 в Visual Studio. Или установите точку останова на последней правой скобке main и запустить в отладчике. Или запустите программу из командной строки.

» должен читать поток, пока он не достигнет конца файла

неоднозначно, но в любом случае чтение слова, как вы делаете, не верно воспроизводит пробелы в потоке. Для более точного воспроизведения содержимого потока вы можете прочитать персонаж по символу или (через getline ) линия по линии. Или, вы можете использовать специальный механизм для этой задачи, а именно: читать буфер, который делает все в одном маленьком утверждении.

Другие решения

Источник

На функцию нельзя ссылаться, так как она является удаленной функцией

Привет, я изучаю C++ из книги и нахожусь на вопрос упражнения ниже

напишите функцию, которая принимает и возвращает istream&. Функция должна считывать поток, пока он не достигнет конца файла. Функция должна печатать то, что она считывает на стандартный вывод. Сбросьте поток так, чтобы он был допустимым перед возвратом потока.

выше моя попытка, однако я получаю ошибки в строке «return iStream».

Я не очень знаю, что это за ошибки, я знаю,что вы можете удалить материал, но я еще не на эту тему в книге. Насколько я знаю, я вообще не касался файла istream. Кто-нибудь может мне помочь?

2 ответов

вы не можете вернуть istream по значению, потому что он не копируется.

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

просто выключите предварительно скомпилированные заголовки в проекте Visual Studio настройки.

это также дает вам более стандартное поведение для включений заголовка.

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

вместо непереносимого Microsoft monstrosity

просто используйте standard

или в C++11 синтаксис типа конечного возврата,

просто запустите программу через Ctrl + Ф5 в Visual Studio. Или поместите точку останова на последнюю правую скобку main и запустить в отладчике. Или запустите программу из командной строки.

« следует читать поток, пока он не попадает конец файла

неоднозначно, но в любом случае чтение слова, как вы делаете, не точно воспроизводит пробелы в потоке. Для более точного воспроизведения содержимого потока вы можете прочитать символ по характеру, или (через getline ) строка по линии. Или, вы можете использовать специальный механизм для этой задачи, а именно вывода читать буфер, который делает все в одной маленькой заявление.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *