I compile the code like so: c++ .\Run.cpp .\Vector.cpp The Vector.cpp and the Vector.h are in the same folder.. I've seen many threads about this problem, but they didn't help, im sure that there is a miniature problem but i can't see it... Thank you for the help!
This is the Vector.h
#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>
template <class T>
class Vector
{
private:
T *data;
size_t size;
public:
Vector() : data(nullptr), size(0) {}
Vector(const Vector<T> &v);
~Vector();
Vector<T> &operator=(const Vector<T> &v);
void push_back(T el);
void push_front(T el);
void erase(size_t i);
void clear();
bool contains(T el);
T &operator[](size_t i);
size_t length();
};
template <class T>
std::ostream &operator<<(std::ostream &os, const Vector<T> &v);
#endif
This is the Vector.cpp
#include "Vector.h"
#include <iostream>
template<class T>
size_t Vector<T>::length(){
return size;
}
template<class T>
T &Vector<T>::operator[] (size_t i){
return data[i];
}
template<class T>
Vector<T>::Vector(const Vector& v) {
data = new T[v.size()];
for (size_t i = 0; i < v.size; i++)
{
data[i] = v[i];
}
size = v.size();
}
template<class T>
Vector<T> &Vector<T>::operator= (const Vector& v){
if(this != &v){
delete data;
data = new T[v.size];
for (size_t i = 0; i < v.size; i++)
{
data[i] = v[i];
}
size = v.size();
}
return *this;
}
template<class T>
Vector<T>::~Vector(){
delete data;
}
template<class T>
void Vector<T>::push_back(T el){
T* newData = new T[size+1];
for (size_t i = 0; i < size; i++)
{
newData[i] = data[i];
}
newData[size] = el;
size++;
delete data;
data = newData;
}
template<class T>
void Vector<T>::push_front(T el){
T* newData = new T[size+1];
for (size_t i = 0; i < size; i++)
{
newData[i+1] = data[i];
}
newData[0] = el;
size++;
delete data;
data = newData;
}
template<class T>
void Vector<T>::erase(size_t _i){
T* newData = new T[size-1];
for (size_t i = 0, j = 0; i < size; i++, j++)
{
if(i == _i){
i--;
continue;
}
newData[i] == data[j];
}
--size;
delete data;
data = newData;
}
The run.cpp
#include "Vector.h"
#include <iostream>
using namespace std;
int main(){
Vector<int> v;
v.push_back(4);
cout << v << endl;
return 0;
}
The errors:
undefined reference to Vector<int>::push_back(int)
,
undefined reference to std::ostream& operator<< <int>(std::ostream&, Vector<int> const&)
, undefined reference to Vector<int>::~Vector()
, undefined reference to `Vector::~Vector()'