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

Конструктор по умолчанию & 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

Источник

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

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

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

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

2 ответа

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

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

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

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

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

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

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

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

default

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Adblock
detector