Когда вы говорите «конструктор копирования по умолчанию» (что обычно не имеет смысла), я предполагаю, что вы имеете в виду «неявно объявленный конструктор копирования» или «конструктор копирования, предоставляемый компилятором»
Точная подпись компилятораПредоставляемый конструктор копирования будет зависеть от содержимого вашего Uniform
класса.Это может быть Uniform::Uniform(const Uniform &)
или Uniform::Uniform(Uniform &)
, опять же, в зависимости от деталей Uniform
(которые вы не предоставили).
Например, если ваш Uniform
включает подобъект (базовый иличлен) типа T
, конструктор копирования которого объявлен как T::T(T &)
(без const
), тогда неявный конструктор Uniform
также будет неявно объявлен как Uniform::Uniform(Uniform &)
(без const
).
Полная спецификация может быть найдена в стандарте языка (12.8 / 5)
Неявно объявленный конструктор копирования для класса X будет иметь форму
X::X(const X&)
, если
- каждый прямой или виртуальный базовый класс B X имеет конструктор копирования, первый параметр которого имеет тип const B & или const volatile B &, а
- длявсе нестатические члены-данные X, относящиеся к типу класса M (или его массиву), каждый такой тип класса имеет конструктор копирования, первый параметр которого имеет тип const M & или const volatile M &.
В противном случаенеявно объявленный конструктор копирования будет иметь вид
X::X(X&)
Неявно объявленный конструктор копирования является встроенным открытым членом своего класса.
Для реализации push_back
требуется Uniform::Uniform(const Uniform &)
, но что-тов вашем классе это значит Uniform::Uniform(Uniform &)
.Отсюда и ошибка.Невозможно сказать, что это такое, не видя определения вашего Uniform
.