RAD Studio
ContentsIndex
PreviousUpNext
E2305: Cannot find 'class::class' ('class'&) to copy a vector OR Cannot find 'class'::operator=('class'&) to copy a vector (C++)

When a C++ class 'class1' contains a vector (array) of class 'class2', and you want to construct an object of type 'class1' from another object of type 'class 1', you must use this constructor:

class2::class2(class2&)

so that the elements of the vector can be constructed. 

The constructor, called a copy constructor, takes just one parameter (which is a reference to its class). 

Usually, the compiler supplies a copy constructor automatically. 

However, if you have defined a constructor for class 'class2' that has a parameter of type 'class2&' and has additional parameters with default values, the copy constructor can't exist and can't be created by the compiler. 

This is because these two can't be distinguished:

class2::class2(class2&)
class2::class2(class2&, int = 1)

You must redefine this constructor so that not all parameters have default values. 

You can then define a reference constructor or let the compiler create one. 

Cannot find class::operator= ... 

When a C++ class 'class1' contains a vector (array) of class 'class2', and you want to copy a class of type 'class1', you must use this assignment operator:

class2::class2(class2&)

so that the elements of the vector can be copied. 

Usually, the compiler automatically supplies this operator. 

However, if you have defined an operator= for class 'class2' that does not take a parameter of type 'class2&,' the compiler will not supply it automatically--you must supply one.

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!