Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

C++ - Szablon funkcji- błąd

kopek11111 27 Oct 2012 18:58 1392 13
  • #1
    kopek11111
    Level 17  
    Może ktoś wskazać błąd, na moje oko jest wszystko w porządku więc nie wiem o co chodzi:

    Code: cpp
    Log in, to see the code


    Kompilator wywala taki błąd:

    Code: cpp
    Log in, to see the code
  • #2
    mi14chal
    Level 28  
    Skoro tworzysz szablon to po co tworzysz funkcje? Poprawna wersja:
    Code: cpp
    Log in, to see the code
  • #3
    kopek11111
    Level 17  
    Po prostu tworze prototyp funkcji dla każdego typu dla którego chcę mieć funkcje w tym wypadku akurat dla float i int...
    Po skompilowaniu podanego przez Ciebie dostałem następujące błędy:

    Code: cpp
    Log in, to see the code
  • #4
    stanleysts
    Level 27  
    Nie tworzy się żadnych prototypów kompilator sam Ci generuje funkcję taką z szablonu.

    A program kolegi musi działać bo tam jest wszystko dobrze.
  • #5
    kopek11111
    Level 17  
    No dobrze, niech tak zostanie chociaż czytając książkę jej autor każe pisać te prototypy po zdefiniowaniu szablonu...
    Jednak ten przykład co podałem nie działa, przykład podany przez "mi14chal" też się nie kompiluje...
    Więc w czym może być problem?
  • #6
    stanleysts
    Level 27  
    Co to za książka? Po co pisać prototyp jak się kompilator po typie argumentów domyśla, a wkleiłeś dokładnie taki kod jak dał kolega?
  • #7
    kopek11111
    Level 17  
    Książka to: "Wygraj z C++" Krisa Jamsa.

    Błąd został wychwycony. Kod "mi14chala" już się kompiluje. Nie kopiowałem całego, tzn nie zmieniałem wszystkiego... Chodzi mi o przestrzeń nazw...
    Zostawiałem z:

    Code: cpp
    Log in, to see the code


    , a gdy to usunę i wstawie to wtedy zaczyna działać:

    Code: cpp
    Log in, to see the code


    I tu jest następne pytanie. Jest w tym jakaś różnica? Jeśli tak to jaka? Do tej pory myślałem, że nie ma to znaczenia bo wydawało mi się, że w przestrzeni nazw
    Code: cpp
    Log in, to see the code
    zawiera się strumień
    Code: cpp
    Log in, to see the code
    i
    Code: cpp
    Log in, to see the code
  • Helpful post
    #8
    mi14chal
    Level 28  
    Zawierają się te strumienie, ale w tej przestrzeni zawiera się także nazwa max którą przypisałeś swojemu szablonowi, oczywiście możesz zostawić using namespace std ale wtedy zmień nazwę szablonu na inną.
  • #9
    stanleysts
    Level 27  
    Ta książka jest po polsku czy po angielsku? takie coś co pisał "rzekomo" ten autor jest bez sensu, może to źle zrozumialeś?
  • #10
    kopek11111
    Level 17  
    Aha, racja ta przestrzeń nazw ma funkcje max, nawet o tym nie pomyślałem:)
    A jeśli chodzi o książkę jest po Polsku... Hm... tak jest napisane a tu krótki cytat:)

    "W tym przykładzie litera T oznacza uniwersalny typ szablonu. Po zdefiniowaniu szablonu w swoim programie musisz zadeklarować prototyp funkcji, dla każdego typu, dla którego chcesz mieć funkcje. Dla szablonu max następujące prototypy tworzą funkcje typu float i int. Gdy kompilator języka C++ napotka w kodzie programu te prototypy funkcji, to zastąpi typ T w szablonie odpowiednimi typami w ten sposób utworzy odpowiednie funkcje (...)"

    I oczywiście przykładzik z prototypami...
  • Helpful post
    #11
    stanleysts
    Level 27  
    Brednie. Przecież takie prototypy wskazują na to, że już taka funkcja gdzieś jest zdefiniowana a ona nie jest nigdzie zdefiniowana. Mogłaby być wygenerowana z szablonu, ale nie będzie, bo jak kompilator widzi, że ma do czynienia z funkcją max a taka jest niby gdzieś zdefiniowana (na podstawie prototypu) to nie stworzy tej funkcji z szablonu ale będzie chciał wykorzystać zwykłą funckcję.
  • #12
    kopek11111
    Level 17  
    Więc autor książki źle opisał ten rozdział... Niestety miał już inne wpadki w poprzednich rozdziałach;) Dzięki za wszelką pomoc...
  • Helpful post
    #13
    Defice
    Level 25  
    Dla lepszego zrozumienia template w C++, polecam zajrzeć do Pasji C++ autorstwa J. Grębosza, tam jest wszystko czarno na białym.
  • #14
    kopek11111
    Level 17  
    ok. Dzięki za dodatkowo lekturę:) Temat uważam za zamknięty...