Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wykorzystywanie szablonów. LNK2019

Ostatnio zmodyfikowano 2017-01-09 22:18
Autor Wiadomość
slovvik
Temat założony przez niniejszego użytkownika
Wykorzystywanie szablonów. LNK2019
» 2017-01-09 22:15:36
Cześć, mam prosty szablon, w którym powinienem mieć możliwość dodawania elementów oraz łączenia utworzonych klass. Niby wszystko ładnie trochę poczytałem o szablonach, ale wywala mi błąd kompilacji. Nie bardzo rozumiem czemu. Przeczytałem na stacku, że to jest niby problem w braku definicji metod, ale ja takowe posiadam. Nie wiem jeszcze w czym może tkwić problem. Tak to u mnie wygląda:

C/C++
//tmp.h
#pragma once
#include <vector>

template < class T >
class tmp
{
public:
    tmp < T >();
    ~tmp < T >();
   
    void add( T element );
    void addCollection( tmp collection );
    void showCollection();
   
private:
    std::vector < T > collection;
};

//tmp.cpp
#include "stdafx.h"
#include "tmp.h"
#include <iostream>


template < class T >
tmp < T >::tmp()
{
}

template < class T >
tmp < T >::~tmp()
{
}

template < class T >
void tmp < T >::add( T element )
{
    collection.push_back( element );
}

template < class T >
void tmp < T >::addCollection( tmp collection )
{
    this->collection.insert( this->collection.end(), collection.collection.begin(), collection.collection.end() );
}

template < class T >
void tmp < T >::showCollection()
{
    for( int i = 0; i < collection.size(); i++ )
    {
        std::cout << collection[ i ];
    }
}

int main()
{
   
    tmp < int > tmp;
   
    tmp.add( 4 );
   
    tmp.showCollection();
   
    return 0;
}

A taki mam kod błędu:

Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "public: __thiscall tmp<int>::tmp<int>(void)" (??0?$tmp@H@@QAE@XZ) referenced in function _main Lista5 c:\Users\bartek-pc\documents\visual studio 2015\Projects\Lista5\Lista5\Lista5.obj 1

 
P-156263
karambaHZP
» 2017-01-09 22:18:37
template
 nie rozdziela się na plik *.h i *.cpp.
Można to zrobić w inny sposób, ale nie poleca się go.
Najlepiej jest definiować metody wewnątrz klasy, lub w tym samym pliku nagłówkowym.
P-156264
« 1 »
  Strona 1 z 1