Я создал структуру и сохранил в ней некоторые значения из файла. Я также создал вектор из пользовательского шаблона класса Vector типа Struct и сохранил исходную структуру в этом векторе. Теперь у меня есть 2 сообщения об ошибках:
|52|error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'WindLogType')|
|52|error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'WindLogType')|
Я понимаю, что это означает, что у меня нет перегруженного оператора << в моем шаблоне векторного класса, но я действительно не хочу его. Я хочу знать, возможно ли создать метод, который распечатывает содержимое массива, или единственный вариант - перегрузить оператор <<. </p>
Main. cpp:
#include <iostream>
#include <fstream>
#include "Date.h"
#include "Time.h"
#include "Vector.h"
using namespace std;
typedef struct {
Date d;
Time t;
float speed;
}WindLogType;
int main()
{
Date dTest;
Time tTest;
float speedtest = 52.5;
Vector<WindLogType> windlog;
ifstream infile("testinput.csv");
if(!infile){
cout << "File not found.";
return -1;
};
WindLogType windlog2;
//int i = 0;
while(!infile.eof()){
infile >> windlog2.d >> windlog2.t >> windlog2.speed;
windlog.add(windlog2);
}
for(int i = 0; i < windlog.size(); i++){
cout << windlog[i] << " " << endl;
}
infile.close();
return 0;
}
Vector.h:
template <class T>
Vector<T>::Vector(int size){
this->capacity = size;
this->nrofel = 0;
this->data = new T*[this->capacity];
this->initialize();
}
template <class T>
T& Vector<T>::operator[](int index){
if(index < 0 || index > this->nrofel){
throw("Out of bounds");
}
return *this->data[index];
}
template <class T>
const T& Vector<T>::operator[](int index) const{
if(index < 0 || index > this->nrofel){
throw("Out of bounds");
}
return *this->data[index];
}
template <class T>
void Vector<T>::initialize(unsigned from){
for(size_t i = from; i < this->capacity; i++){
this->data[i] = nullptr;
}
}
template <class T>
Vector<T>::~Vector(){
for(size_t i = 0; i < capacity; i++){
delete this->data[i];
}
delete[]this->data;
}
template <class T>
void Vector<T>::expand(){
this->capacity *= 2;
T** tempData = new T*[this->capacity];
for(size_t i = 0; i < this->nrofel; i++){
tempData[i] = new T(*this->data[i]);
}
for(size_t i = 0; i < this->nrofel; i++){
delete this->data[i];
}
delete[] data;
this->data = tempData;
this->initialize(this->nrofel);
}
template <class T>
void Vector<T>::add(const T &obj){
if(this->nrofel >= this->capacity){
this->expand();
}
this->data[this->nrofel++] = new T(obj);
}
Любые предложения будут полезны!