Как да разрешите грешката „Няма съответстващ конструктор за инициализация на“ в C++

Kak Da Razresite Greskata Nama S Otvetstvas Konstruktor Za Inicializacia Na V C



В C++ конструкторът е определена членска функция, която носи името си след името на класа, към който е свързана. Използва се за инициализация на някои полезни стойности за членовете на обекта. Ако конструкторът не е дефиниран от потребителя, C++ компилаторът генерира конструктор по подразбиране и не очаква параметри и празно тяло. Въпреки това, когато има дефиниран от потребителя конструктор, е необходимо да се декларират тялото и параметрите му.

Какво причинява грешката „Няма съответстващ конструктор за инициализация на“ в C++?

Когато работите с конструктори в C++, възниква грешка „Няма съвпадащ конструктор за инициализация на“, това обикновено се дължи на това, че когато конструкторът се извика, конструкторът по подразбиране от компилатора не се създава, така че трябва сами да декларирате параметрите и тялото на конструктора. Неуспешното деклариране на правилни параметри води до този тип грешка на конструктора.







Създайте прост текстов файл, поставете кода на функцията Square() в него и го запазете с разширението .h. Сега поставете този файл в папката за включване на папката bin на CPP компилатора. Сега, при извикване на този заглавен файл в main.cpp, този файл ще бъде прочетен от компилатора.



Заглавен файл Square.h

#ifndef SQUARE_H

#define SQUARE_H


клас Квадрат {

частен :

двойно дължина ;

двойно ширина ;

публичен :

Квадрат ( двойно , двойно ) ;

двойно getLength ( ) конст ;

двойно getWidth ( ) конст ;

} ;



Квадрат :: Квадрат ( двойно л, двойно в ) {

дължина = л ;
ширина = в ;

}



двойно Квадрат :: getWidth ( ) конст { връщане ширина ; }

двойно Квадрат :: getLength ( ) конст { връщане дължина ; }



#endif

main.cpp Заглавен файл

#include

#include 'square.h'

използвайки пространство от имена std ;



вътр основен ( )

{

Квадратна кутия 1 ( 10.0 , 10.0 ) ;

Квадратна кутия 2 ;



cout << ' ширина и дължина на кутия 1: ' << кутия1. getWidth ( ) << ', ' << кутия1. getLength ( ) << endl ;

cout << ' ширина и дължина на кутия 2: ' << кутия2. getWidth ( ) << ', ' << кутия2. getLength ( ) << endl ;



кутия2 = кутия1 ;

cout << ' Когато Square Box 1 е равно на Square Box 2 ' << endl ;

cout << ' ширина и дължина на кутия 1: ' << кутия1. getWidth ( ) << ', ' << кутия1. getLength ( ) << endl ;

cout << ' ширина и дължина на кутия 2: ' << кутия2. getWidth ( ) << ', ' << кутия2. getLength ( ) << endl ;



връщане 0 ;

}

В тази програма потребителят въвежда дължината и ширината на две квадратни кутии и след това приравнява двете кутии и връща тяхната дължина и ширина:




Компилаторът връща грешката в ред №14, тъй като изпълнителят очаква два аргумента, докато няма предоставени аргументи:





В ред #8 компилаторът връща грешка в конструктора, защото аргументите не са предоставени, докато трябва да има дефинирани аргументи.

Как да разрешите грешката „Няма съответстващ конструктор за инициализация на“ в C++

Компилаторът показва грешката в ред № 8 на кода main.cpp, тъй като конструкторът по подразбиране на Square се опитва да извика. Компилаторът не може да генерира конструктор по подразбиране, защото вече има дефиниран от потребителя конструктор, който приема два аргумента. Следователно, посочете параметрите му като:



Квадратна кутия 2 ( 0 , 10 ) ;

Компилаторът генерира конструктор по подразбиране само ако няма дефиниран от потребителя конструктор. Така че в този случай, когато има дефиниран конструктор, конструкторът по подразбиране трябва да бъде предоставен от потребителя. Така че за тази цел осигурете аргументи по подразбиране и в конструктора с два аргумента във файла Square.h. Това не оставя данните неинициализирани.

Квадрат :: Квадрат ( двойно л = 0 , двойно в = 0 )

Грешката на конструктора може да бъде коригирана чрез извикване и деклариране на конструктора и неговите параметри правилно. Кодовете в main.cpp и Square.h се променят според инструкциите, дадени по-горе. И грешката на конструктора без съвпадение е разрешена. Това е актуализираният код за заглавния файл:

Това е актуализираният код за основния файл:

Горните кодове след отстраняване на грешки връщат следния резултат:

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

Заключение

В C++ конструкторът е определена членска функция, която носи името си след името на класа, към който е свързана. Използва се за инициализация на някои полезни стойности за членовете на обекта. Грешката „Няма съответстващ конструктор за инициализация на“ в C++ се среща, когато има грешка в декларацията на конструктора. Обикновено C++ компилаторът генерира сам конструктор, но когато конструкторите са декларирани от потребителя, тогава трябва да има правилна декларация на параметрите и тялото на конструктора, за да се избегнат подобни грешки.