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

[c++]szablon metody

Ostatnio zmodyfikowano 2014-04-29 15:07
Autor Wiadomość
Szary
Temat założony przez niniejszego użytkownika
[c++]szablon metody
» 2014-04-28 21:10:43
Hej mam szablon i działa poprawnie. Problem zaczyna się gdy wywołuję go po przez obiekt tej klasy. Jeżeli jest on wykonywany w innej metodzie tej klasy lub jako "luźna funkcja" to działa. W ogóle nie rozumiem o co chodzi.
C/C++
//main.cpp
#include <iostream>
#include "Universal.h"
using namespace std;

//to działa
//template <class T>
//void Universal::flipArray (T reverseArray, T correcteArray, int lenght)
//{
// lenght -= 1;
// for ( int i = 0; lenght >= 0; --lenght, ++i )
// {
// correcteArray [i] = reverseArray [lenght];
// }
//}


auto main( int argc, char arg[] )->int
{
    Universal * univ = new Universal;
    int dlugosc = 9;
   
    char * znak = new char[ dlugosc ];
    znak = "abcdefghi";
   
    char * tab = new char[ dlugosc ];
   
    univ->flipArray( znak, tab, dlugosc ); //to nie działa
   
    //flipArray (znak, tab, dlugosc); jako luzna funkcja szablon dziala
    for( int i = 0; i < dlugosc; i++ )
         std::cout << tab[ i ] << ", ";
   
    std::cin.get();
}

//universal.cpp
#include "Universal.h"


Universal::Universal()
{
   
}


Universal::~Universal()
{
   
}


int * Universal::shareOnNumbers( int n, int lenght )
{
    int * number = new int[ lenght ];
    for( int i = 0; i < lenght; i++ )
    {
        number[ i ] = n % 10;
        n /= 10;
    }
   
    int * correcteArray = new int[ lenght ];
    flipArray( number, correcteArray, lenght ); // w innej metodzie klasy szablon dziala
   
    return correcteArray;
}


template < class T >
void Universal::flipArray( T reverseArray, T correcteArray, int lenght )
{
    lenght -= 1;
    for( int i = 0; lenght >= 0; --lenght, ++i )
    {
        correcteArray[ i ] = reverseArray[ lenght ];
    }
}


//universal.h
#pragma once
class Universal
{
public:
    Universal();
    ~Universal();
   
    int * shareOnNumbers( int, int );
   
    template < class T >
    void flipArray( T, T, int );
};



1>Main.obj : error LNK2019: unresolved external symbol "public: void __thiscall Universal::flipArray<char *>(char *,char *,int)" (??$flipArray@PAD@Universal@@QAEXPAD0H@Z) referenced in function _main
1>C:\Users\Szary\Documents\Visual Studio 2013\Projects\C++\Universal\Debug\Universal.exe : fatal error LNK1120: 1 unresolved externals
========== Kompilacja: 0 zakończono powodzeniem, 1 zakończono niepowodzeniem, 0 zaktualizowano, 0 pominięto ==========

P-108874
Monika90
» 2014-04-28 21:16:44
Pezenieś defincję szablonu funkcji do pliku nagłówkowego.
P-108875
Szary
Temat założony przez niniejszego użytkownika
» 2014-04-28 21:17:55
Szablony muszą być inline?
P-108876
Monika90
» 2014-04-28 21:19:57
Nie muszą.
P-108877
michal11
» 2014-04-29 15:07:58
Ale nie mogą być w pliku .cpp bo nie są kompilowane.
P-108911
« 1 »
  Strona 1 z 1