Linkowanie z szablonem funkcji

0

Mam sobie trzy pliki:

jestw.cpp

/********************************************************
*funkcja sprawdza czy dany element znajduje sie w tablicy
*zwraca numer elementu lub jesli w tablicy nie wystepuje - liczbę -1
********************************************************/

template<class rodzajTablicy> int jestWTablicy(rodzajTablicy *tablica, int rozmiar, rodzajTablicy obiekt)
{
for (int x = 0; x < rozmiar; x++)
  if (tablica[x] == obiekt)
    return x;

return -1;
}

jestw.h

template<class rodzajTablicy> int jestWTablicy(rodzajTablicy *tablica, int rozmiar, rodzajTablicy obiekt);

main.cpp

#include <iostream>
#include "jestw.h"

using namespace std;


int main()
{
char alfabet[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

char znak;

 cout << "Który znak mam znaleźć?: ";

znak = getchar();

 int naKtorymMiejscu = jestWTablicy(alfabet, 26, znak);

 if (naKtorymMiejscu >= 0)
   cout << "Znak \'" << znak << "\' znaleziono w tablicy na miejscu " << naKtorymMiejscu << endl;
 else
   cout << "Znak \'" << znak << "\' nie występuje w tablicy" << endl;

}

Zgodnie z tym co jest w kodzie chciałbym wykorzystać funkcję z pliku jestw.cpp w main.cpp. Jak mam to zrobić? Kompilator: g++ 4.2.3, linker: GNU ld 2.18.0.20080103.

0

Funkcje szablonowe musisz albo umieścić w pliku .h, albo dodać specjalną deklaracje (http://krishnadevan.spaces.live.com/blog/cns!A0BE50C9AF3CC73E!200.entry) mówiącą jaki tym szablonowy jest używany, gdyż kompilator kompilując plik .cpp nie wie, że ma wygenerować szablon dla typu char.

0

Zapomniałem dodać że system operacyjny Debian GNU/Linux.
Co rozumiesz jako dołączanie do projektu? Wkleić kod szablonu do pliku main.cpp? Takie coś odpada.

0

autor: czytaj (zwlaszcza dwa pierwsze) i zapamietaj :)
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.14
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.15
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16

adf88: kompilator kompilujac .cpp moze wiedziec jakie specjalizacje wygenerowac -- see 'explicit template instantiation'.. ale utryzmywanie tego jest upierdliwe na maksa :)

0
quetzalcoatl napisał(a)

adf88: kompilator kompilujac .cpp moze wiedziec jakie specjalizacje wygenerowac -- see 'explicit template instantiation'.. ale utryzmywanie tego jest upierdliwe na maksa :)
Tia, GCC świetnie sobie radzi z szablonami :/
Z mi znanych to tylko visual daje radę. Zresztą nie ma co gadać, było już na ten temat nie raz.

0

Dzieki z odpowiedź. Już wszystko jasne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1