Ошибка компоновщика: неопределенная ссылка на… (функции-члены) [дубликаты]

0

Я прочитал многие другие вопросы об этой ошибке компоновщика, но я все еще не смог ее решить...

vector.hpp

#ifndef vector_hpp
#define vector_hpp

namespace vec
{

template<class T> class Vector
{
private:
    T* arr;
    unsigned int numberOfElements;

public:
    Vector();
    ~Vector();
    void push_back(const T&);
    void pop_back();
    void pop_front();
    unsigned int size() const;
    T& at(int);
    T& front();
    bool empty() const;

    T& operator[](const int) const;
};

}


#endif

vector.cpp (не все, было бы слишком длинным)

#include "vector.hpp"
#include <iostream>

namespace vec
{

template<class T>
Vector<T>::Vector()
        : arr(nullptr), numberOfElements(0)
{
    return;
}

template<class T>
Vector<T>::~Vector()
{
    delete[] arr;
}

template<class T>
unsigned int Vector<T>::size() const
{
    return numberOfElements;
}

...
}    

patientenliste.hpp

#ifndef patientenliste_hpp
#define patientenliste_hpp

#include "vector.hpp"
#include <iostream>
#include "patient.hpp"

using namespace std;

class Patientenliste
{
private:
    vec::Vector<Patient> liste;

public:
    Patientenliste& operator+= (const Patient&);
    vec::Vector<Patient>& getPListe();

    friend ostream& operator<< (ostream&, const Patientenliste&);
};


ostream& operator<< (ostream&, const Patientenliste&);

#endif

patientenliste.cpp

#include "patientenliste.hpp"

Patientenliste& Patientenliste::operator+= (const Patient& p)
{
    liste.push_back(p);
    return *this;
}

vec::Vector<Patient>& Patientenliste::getPListe()
{
    return liste;
}

ostream& operator<< (ostream& os, const Patientenliste& p)
{
    if(p.liste.size() == 0)
        os << "Keine Patienten in der Liste.";
    else
        for(unsigned int i=0; i < p.liste.size(); i++)
            os << p.liste[i] << endl;
    return os;
}

У меня есть еще несколько файлов/классов в моем проекте, но каждый класс, который использует мой векторный класс, получает ошибку Linker:

patientenliste.cpp :( текст + 0x32): Nicht definierter Verweis auf vec::Vector<Patient>::size() const' patientenliste.cpp:(.text+0x5e): Nicht definierter Verweis auf vec :: Vector :: size() const 'patientenliste.cpp :(. text + 0x6c): Nicht definierter Verweis auf' vec :: Vector :: operator [] (int) const '

(на английском языке "Nicht definierter Verweis auf" означает "неопределенная ссылка на"). Я абсолютно не понимаю, что происходит неправильно... Я уже пробовал это с пространством имен vec, но это тоже не сработало.

Теги:
linker
vector

1 ответ

0
Лучший ответ

Определения шаблонов должны быть в том же заголовочном файле, где определен соответствующий класс шаблона.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню