Ошибка C++: нет жизнеспособной перегрузки ‘=’:

Osibka C Net Ziznesposobnoj Peregruzki



Ошибки — это операции, которые могут быть результатом неправильной работы любого кода. Ошибка не может быть обнаружена на момент написания, пока мы не выполним код или он не будет скомпилирован. Некоторые ошибки запрещают выполнение кода до тех пор, пока они не будут удалены. Сегодня мы также обсудим ошибку, которая также возникает при компиляции программы, а именно «ошибка: нет соответствия оператору =». Эта ошибка может быть вызвана такими причинами, как: если мы передали указатель, куда должна быть передана строка, модифицировали постоянную переменную и т. д. Удалить ошибку «нет жизнеспособной перегрузки» несложно, но основная задача состоит в том, чтобы понять ошибку, потому что он просто показывает ошибку без какого-либо описания ошибки.

Синтаксис

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







ошибка : не совпадает за оператор знак равно

Пример #01:

Давайте иметь представление об этой ошибке и методе ее решения. Чтобы лучше понять это, мы выполним пример, в котором мы собираемся передать имена с помощью объектов в функцию, и она затем отобразит их. Сначала мы включим заголовочный файл iostream. После этого мы объявим класс с именем «my_object». Внутри которого мы объявили две строковые переменные с именами «F_name» и «L_name», «F_name» указывает имя человека, где «L_name» указывает фамилию человека.



Затем мы объявили общедоступный конструктор с именем «my_object()», в котором мы присвоили нулевые значения обеим переменным «F_name» и «L_name». После этого мы объявили еще одну функцию, которой передали переменные строкового типа «fn» и «ln». Внутри этого мы вызвали метод name_set(). Затем мы объявили две функции-члена «show()» и «name_set()». Когда вызывается функция «show()», она отображает имена и фамилии вместе. Принимая во внимание, что в функции-члене «set_name()» мы передали две строковые переменные строкового типа «fn» и «ln», которые мы также передали второму конструктору.



Теперь, используя оператор присваивания копирования класса my_object, мы берем один параметр типа «my_object». Компилятор всегда объявляет его как встроенный открытый член любого класса. Внутри этого члена мы присвоили src.F_name «F_name» и src.L_name «L_name», что мы сохранили копию «F_name» и «L_name». Это передается членам класса my_object. Теперь мы объявили объект класса my_cobject с именем «name1», которому мы передали две строки «Anna» и «smith» в качестве аргумента. Это вызовет конструктор и отобразит имя вместе с фамилией.





После этого мы создали еще один объект «name2», а затем отдельно присвоили имя этому объекту. После передачи значений в конструктор для обоих объектов мы вызвали метод show(), который затем отобразит имена для обоих объектов «nam1» и «name2». В конце кода мы вернули нулевое значение и выполнили наш код.

включают
учебный класс мой_объект {
частный :
станд. :: нить Ф_имя, L_имя ;
публичный :
мой_объект ( ) { Ф_имя знак равно ' ' ; L_имя знак равно ' ' ; }
мой_объект ( стандарт :: нить фн, стандарт :: нить п ) {
имя_набор ( фн, пер ) ;
}
пустота показывать ( ) { станд. :: cout << 'Имя ' << Ф_имя << ' ' << L_имя << '. \n ' ; }
пустота имя_набор ( стандарт :: нить фн, стандарт :: нить п ) { Ф_имя знак равно фн ; L_имя знак равно п ; }
мой_объект & оператор знак равно ( константа мой_объект & источник ) {
Ф_имя знак равно источник Ф_имя ;
L_имя знак равно источник L_имя ;
возвращаться * это ;
}

} ;
инт главный ( инт аргк, уголь ** argv ) {
имя_моего_объекта1 ( 'Анна' , 'кузнец' ) ;
имя_моего_объекта2 ;
имя2 знак равно ( 'Анна' , 'кузнец' ) ;
имя1. показывать ( ) ;
имя2. показывать ( ) ;
возвращаться 0 ;
}

После выполнения нашего кода у нас есть эта ошибка, которая показывает, что мы написали неправильный код в строке 24, указывая тип возникшей ошибки «ошибка: не соответствует оператору =». Теперь попробуем исправить эту ошибку.



Для устранения этой ошибки у нас есть несколько способов передать значения конструктору любого класса. В первом методе мы просто назначим объект «name1» объекту «name2», потому что мы передали одинаковые значения обоим объектам, поэтому нет необходимости передавать их по отдельности. Теперь выполняем код.

инт главный ( инт аргк, уголь ** argv ) {

имя_моего_объекта1 ( 'Анна' , 'кузнец' ) ;
имя_моего_объекта2 ;
имя2 знак равно имя1 ;
имя1. показывать ( ) ;
имя2. показывать ( ) ;

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

Второй способ устранения этой ошибки заключается в том, что мы должны передать разные значения обоим объектам. Мы просто будем использовать имя класса вместе со значениями, которые должны быть переданы конструктору в качестве аргумента. Мы передали первое имя «jhone» и второе имя «smith». Затем мы выполнили код.

инт главный ( инт аргк, уголь ** argv ) {

имя_моего_объекта1 ( 'Анна' , 'кузнец' ) ;
имя_моего_объекта2 ;
имя2 знак равно мой_объект ( 'Джон Смит' ) ;

имя1. показывать ( ) ;
имя2. показывать ( ) ;

После выполнения добавленного выше кода у нас есть вывод, как показано ниже. Для объекта «имя1» отображалось имя «Анна Смит», а для второго объекта «имя2» отображалось «Джон Смит». Но на этот раз наш код работал корректно, без каких-либо ошибок.

Теперь мы попробуем другой метод для успешного выполнения нашего кода. Как и в приведенных выше случаях, мы попытались присвоить значения объектам с помощью оператора присваивания. Но на этот раз мы будем передавать значения во время объявления объекта. Как видно из приведенного ниже фрагмента, во время объявления объекта «name1» мы передали значения в качестве аргумента объекту, повторяя тот же шаг для «name2». Теперь мы выполняем код еще раз.

инт главный ( инт аргк, уголь ** argv ) {
имя_моего_объекта1 ( 'Анна' , 'кузнец' ) ;
имя_моего_объекта2 ( 'Джон Смит' ) ;
имя1. показывать ( ) ;
имя2. показывать ( ) ;

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

Вывод

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