Общий делитель 2 и 4, как математик любитель, заявляю 4
= delete;
) вместо деланья их приватными. Приватным делают просто конструктор, когда надо запретить кому-то создавать объект самостоятельно вне специальной фабрики. То есть ошибка вылезает из за того, что компилятор заносит в таблицу виртуальных методов реализации обоих методов push и видит, что lib::LinkedList::push(const T&) пытается получить доступ к приватному конструктору копирования?
push(const T&)
, таки должна быть сгенерирована. И тут они видит в ней ошибку. Я если честно не совсем понимаю почему он начинает ругаться до того, как я эту функцию вызову, я же не требую от него выполнения этого метода.
asdfhjasdfghjsdfvvhj;
. Компилятор вам ругнется на ошибку в фукнкции. Даже если она не вызывается. Так что тут вам шаблон наоборот иногда даже поблажку дает. Что вас и запутало.это же вообще обьявление функции, это не инстанцирует объект класса
cout << "aaa";
в конструктор и убедитесь, что оно вызывается.Можно как то обойти эту проблему?
В листинге это видно в том числеВ каком?
std::vector<int> operator + (const std::vector<int> &a, const std::vector<int> &b)
{
if(a.size()!=b.size())
{
throw std::range_error("sizes mismatch!");
}
vector<int> result;
result.reserve(a.size());
for(size_t i=0; i < a.size(); ++i)
{
result.push_back(a[i] + b[i]);
}
return result;
}