С риском констатировать очевидное: ваш operator[]
возвращает Wrapper&
, который является ссылочным типом, и вы пытаетесь присвоить Wrapper*
, указатель введите его.Это не сработает.
Если вы слегка переписали свою основную функцию, скажем так:
int main()
{
PArr a(3);
auto k = a[0];
}
, вы можете найти ошибку более информативной:
main.cpp: В функции-члене 'Wrapper & PArr :: operator [] (int)':
main.cpp: 27: 27: ошибка: неверная инициализация ссылки типа 'Wrapper &' из выражения типа'Wrapper *'
return _wrappers[index];
~~~~~~~~~~~~~~~^
Вместо этого вы можете попробовать что-то вроде этого:
Wrapper*& PArr::operator[](int index)
{
return _wrappers[index];
}
, который компилируется и запускает ваш исходный main
, по крайней мере для меня.Я не даю никаких обещаний.
Наконец, этот ответ не место для углубленных проблем с вашим кодом (используйте умные указатели, используйте стандартные классы контейнеров библиотеки, такие как array
или vector
, подумайтетакие вещи, как std::any
или std::variant
), но, знаете, вы должны прочитать об этих вещах.