Я пытаюсь сделать простую реализацию вектора c ++, и она работает с простым typename (или class, то же самое), но с typename * (double * или Test *) у меня ошибка, почему?Я попытался изменить нотацию на -> и это должно работать нормально, но это не так!Что я неправильно понял?Я пытаюсь отладить VS2017, но не вижу, что не так, оператор [] возвращает * Test и я использую -> to element.
Source.cpp
#include <iostream>
#include "Vector.h"
using namespace std;
class Test
{
public:
double a = 1;
Test(){}
};
int main()
{
Vector<Test*> Vec2(10);
{
for (int i = 0; i < 10; i++)
Vec2[i]->a = i;
}
for (int i = 0; i < 10; i++)
cout << "Vec2[" << i << "] = " << Vec2[i]->a << endl;
return 0;
}
Vector.h
#include <cstdlib>
#include <cassert>
template <typename T>
class Vector
{
public:
T *arr = nullptr;
size_t _size = 0;
size_t _capacity = 4;
Vector() {
arr = new T[_capacity];
}
Vector(size_t size) {
_capacity = size << 2;
arr = new T[_capacity];
_size = size;
}
~Vector() {
delete[] arr;
}
size_t size() {
return _size;
}
size_t capacity() {
return _capacity;
}
void clear() {
_size = 0;
}
T& operator[](size_t idx) { return arr[idx]; }
const T& operator[](size_t idx) const { return arr[idx]; }
void reallocate()
{
T *arr_n = new T[_capacity];
for (int i = 0; i < _size; i++)
arr_n[i] = arr[i];
delete[] arr;
arr = arr_n;
}
Vector& operator=(const Vector& B) {
reallocate(B.capacity());
_size = B.size();
for (size_t j = 0; j < _size; ++j) {
arr[j] = B->arr[j];
}
return *this;
}
void push_back(T input)
{
if (_size == _capacity) {
_capacity <<= 2;
reallocate();
}
arr[_size] = input;
++_size;
}
};