Я пытаюсь написать свой собственный класс, который должен представлять шаблонный массив. Я хотел определить для него оператор +, но таким образом, чтобы он мог добавить два массива, указанных с разными типами (конечно, если один можно преобразовать в другой, и наоборот). Чтобы сделать это, я должен был создать шаблонное определение оператора (это вообще хорошо?), И после компиляции мой компилятор сообщает, что, по сути, как я понял, не могу найти ни одного из членов состояния моего учебный класс. Код ниже любой благодарной помощи ... потому что код прекрасно работает, когда все опубликовано c, но, очевидно, это не главное.
MyArray.hpp: In instantiation of ‘MyArray<decltype ((((MyArray<T>*)this)->MyArray<T>::ptr[0] + other[0]))> MyArray<T>::operator+(const MyArray<A>&) [with A = int; T = double; decltype ((((MyArray<T>*)this)->MyArray<T>::ptr[0] + other[0])) = double]’:
test3.cpp:65:3: required from here
MyArray.hpp:94:32: error: ‘int* MyArray<int>::ptr’ is private within this context
tmp[i] = ptr[i] + (other.ptr)[i];
~~~~~~~^~~~
MojNiz.hpp:9:12: note: declared private here
T* ptr = nullptr;
#include <iostream>
template <typename T>
class MyArray {
private:
T* ptr = nullptr;
size_t arraySize = 0;
size_t maxCapacity = 0;
public:
template <typename A>
auto operator+(const MyArray<A>& other)-> MyArray<decltype(ptr[0] + other[0])> {
if (arraySize != other.size()) throw std::invalid_argument("Nope");
MyArray<decltype(ptr[0] + other[0])> tmp;
tmp.ptr = new decltype(ptr[0] + other[0])[arraySize];
tmp.arraySize = arraySize;
for (int i = 0; i < arraySize; ++i) {
tmp[i] = ptr[i] + (other.ptr)[i];
}
return tmp;
}