Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
'identifier' : nie ma dostępnego konstruktora kopiującego lub konstruktor kopiujący jest zadeklarowany jako 'explicit'
Uwagi
Konstruktor kopiujący inicjuje obiekt z innego obiektu tego samego typu. (Tworzy kopię obiektu). Kompilator generuje domyślny konstruktor kopiowania, jeśli nie zdefiniujesz żadnych konstruktorów.
Aby naprawić ten błąd
Problem może wystąpić, gdy zostanie podjęta próba skopiowania klasy, której konstruktorem kopii jest
private. W większości przypadków nie należy kopiować klasy, która maprivatekonstruktor kopiujący. Typowa technika programowania deklarujeprivatekonstruktor kopiujący, aby zapobiec bezpośredniemu użyciu klasy. Klasa może być bezużyteczna samodzielnie lub wymagać innej klasy, aby działać poprawnie.Jeśli ustalisz, że można bezpiecznie użyć klasy, która ma konstruktor kopiujący
private, należy utworzyć nową klasę z klasy, która maprivatekonstruktor i udostępnićpublickonstruktor lubprotectedkopię w nowej klasie. Użyj klasy pochodnej zamiast oryginalnej.Problem może wystąpić, gdy zostanie podjęta próba skopiowania klasy, której konstruktor kopiowania jest jawny. Deklarowanie konstruktora kopiowania, ponieważ
explicituniemożliwia przekazywanie/zwracanie obiektów klasy do/z funkcji. Aby uzyskać więcej informacji na temat jawnych konstruktorów, zobacz Konwersje typów zdefiniowanych przez użytkownika.Problem może wystąpić, gdy zostanie podjęta próba skopiowania wystąpienia klasy zadeklarowanego
constprzy użyciu konstruktora kopii, który nie przyjmuje parametruconstodwołania. Zadeklaruj konstruktor kopiujący za pomocąconstodwołania typu zamiast odwołania do typu innego niż const.