Пусть у меня есть класс «MyClass» -:C++: массив объектов класса с перегруженными Конструкторы
class myclass
{
public:
int n;
myclass(int n=0)
{
this->n=n;
}
myclass(myclass &a)
{
this->n=a.n;
}
~myclass()
{
cout<<n<<"\n";
}
};
Теперь я хочу, чтобы создать массив объектов «MyClass» следующим образом -:
int main()
{
myclass arr[]= {5}; // Only 1 element for simplicity...
}
Но когда я это сделать, я получаю следующее сообщение об ошибке -:
В функции 'INT основной()':
| 47 | ошибка: нет соответствия фу nction для вызова 'MyClass :: MyClass (MyClass)'
| 47 | примечание: кандидаты:
| 36 | Примечание: MyClass :: MyClass (MyClass &)
| 36 | Примечание: не известно преобразование для аргумента 1 из 'MyClass' до 'MyClass &'
| 32 | Примечание: MyClass :: MyClass (интермедиат)
| 32 | Примечание: не известно преобразование для аргумента 1 из 'MyClass' до '' междунар
Но когда я удаляю конструктор копирования myclass(myclass &a)
из класса, я не получаю никаких ошибок, и все работает нормально ...
Так что теперь мои вопросы -:
1). Почему это происходит?? Является ли myclass(int n=0)
лучшим совпадением, чем конструктор копирования здесь?
2). Как успешно скомпилировать его, учитывая, что я хочу как конструктор копирования, так и целочисленный конструктор в моем классе?
Примечание: Я использую GCC версии 4.7.3 на Ubuntu 13.04
Не должен ли конструктор копирования использовать 'const myclass & a'? – nvoigt
@ nvoigt Оба являются законными, и есть редкие случаи (например, 'std :: auto_ptr'), где конструктор копирования принимает неконстантную ссылку.Но в целом: вы хотите иметь возможность копировать временные файлы (для которых требуется const ref), и вы не изменяете копируемый объект (так что вы можете использовать const ref). –