Fehler Verweis auf nicht aufgelöstes externes Symbol



  • Hallo. Hab schon einige Seiten gelsen, jedoch bin ich noch nicht auf die Lösung meines Problems gestoßen:

    Hier erst mal der Code:

    CVektor.h

    #pragma once
    
    template<class T, int n>
    class CVektor
    {
    typedef T value_type;
    
    private:
    	T _vec_array[n];
    
    public:
    	CVektor(void);
    	CVektor(T v0);
    	~CVektor(void);
    	void ausgabe();
    	T& operator[](int i);
    	CVektor<T,n> operator+(const CVektor<T,n> w);
    };
    

    CVektor.cpp

    #include "CVektor.h"
    #include <iostream>
    
    using namespace std;
    
    template<class T, int n>
    CVektor<T,n>::CVektor(void)
    {
    }
    
    template<class T, int n>
    CVektor<T,n>::CVektor(T v0)
    {
    	for (int i=0;i<n;i++)
    	{
    		_vec_array[i]=v0;	// Belegung mit Default-Wert
    	}
    }
    
    template<class T, int n>
    CVektor<T,n>::~CVektor(void)
    {
    	delete this->_vec_array;
    }
    
    template<class T, int n>
    void CVektor<T,n>::ausgabe()
    {
    	cout << "(";
    	for (int i=0;i<n-1;i++)
    	{
    		cout << _vec_array[i] << ", ";
    	}
    	cout << _vec_array[n-1] << ")" << endl;
    }
    
    template<class T, int n>
    T& CVektor<T,n>::operator [](int i)
    {
    	if (i<=0 || i>n)
    	{
    		cerr << "Indexfehler" << endl;
    		exit(1);
    	}
    	else
    	{
    		return _vec_array[i];
    	}
    }
    
    template<class T, int n>
    CVektor<T,n> CVektor<T,n>::operator +(const CVektor<T,n> w)
    {
    	CVektor<T,n> v;
    	for ( int i=0;i<n;i++)
    	{
    		v[i]=_vec_array[i]+w._vec_array[i];
    	}
    	return v;
    }
    

    main.cpp

    #include <iostream>
    #include "CVektor.h"
    
    using namespace std;
    
    int main(void)
    {
    	CVektor<int,3> a,b;
    	for (int i=0;i<3;i++)
    	{
    		a[i]=5-i*i;
    		b[i]=4-2*i;
    	}
    	CVektor<int,3> sum = a + b;
    	cout << "Summenvektor: ";
    	sum.ausgabe();
    }
    

    Ich bekomme dort immer den Fehler: Verweis auf nicht aufgelöstes externes Symbol.

    Vielen dank für die Hilfe


  • Mod

    Du darfst die Deklaration und die Definition bei Templates nicht trennen.

    Bei Templates muss der Compiler Deklaration und Definition der Funktionen zur Verfügung haben.
    Pack auch alles aus der CVektor.cpp Datei in den Header oder mach auch einen include auf die cpp Datei.


Anmelden zum Antworten