[C++] Szablony funkcji w wielu plikach
Ostatnio zmodyfikowano 2016-01-03 12:58
dovah993 Temat założony przez niniejszego użytkownika |
[C++] Szablony funkcji w wielu plikach » 2016-01-02 17:00:14 Witam. Robię to po raz pierwszy, bo właśnie doczytałem że mój program musi być zrobiony nie funkcją, a jej szablonem. Obecnie mam taki błąd: Error 1 error LNK1561: entry point must be defined c:\U sers\# # # neDrive\dokumenty\visual studio 2013\Projects\Lab 05\Lab 05\LINK Lab 05
Program wygląda tak. MAIN.CPP #include <iostream> #include "clamp.hpp"
template < class typ > int main() { std::cout << clamp( 2, 3, 4 ); getchar(); }
CLAMP.CPP #include <iostream>
template < class typ > typ clamp( typ a, typ b, typ c ) { if( b < a ) { return a; } if( b > c ) { return c; } if(( a <= b ) &&( b <= c ) ) { return b; } }
CLAMP.HPP #ifndef clamp_hpp #define clamp_hpp
template < class typ > typ clamp( typ a, typ b, typ c );
#endif
|
|
1aam2am1 |
» 2016-01-02 17:18:04 Umieść ciało funkcji w pliku nagłówkowym |
|
carlosmay |
» 2016-01-02 19:38:01 template < class typ > int main() { std::cout << clamp( 2, 3, 4 ); getchar(); }
Nie wiem czy tak da radę. Próbowałem u siebie bo nie byłem pewny czy aby można i LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) To jest szablon, a funkcja main() jest punktem wejściowym dla programu, więc musi istnieć od samego początku. Szablon funkcji to taka deklaracja, bez ciała funkcji (póki nie będzie potrzebne). |
|
dovah993 Temat założony przez niniejszego użytkownika |
» 2016-01-02 19:44:34 Więc jak to powinno być poprawnie zrobione? |
|
1aam2am1 |
» 2016-01-02 20:09:29 #include <iostream>
#ifndef clamp_hpp #define clamp_hpp
template < typename typ > typ clamp( typ a, typ b, typ c ) { if( b < a ) { return a; } if( b > c ) { return c; } return b; }
#endif
int main( void ) { std::cout << clamp < int >( 2, 3, 4 ); getchar(); return 0; }
|
|
carlosmay |
» 2016-01-02 20:10:13 Szablon funkcji jest jak szablon do malowania. Masz go ale nie używasz, póki nie będzie potrzebny. Musi jednak jego deklaracja być znana w miejscu wywołania. plik nagłówkowy deklaracja.h #pragma once template < typename Typ > Typ wieksza( Typ a, Typ b );
Plik nagłówkowy definicja.h #pragma once #include "deklaracja.h" template < typename Typ > Typ wieksza( Typ a, Typ b ) { return a > b ? a: b; }
Plik źródłowy main.cpp #include <iostream> #include "definicja.h" int main() { std::cout << wieksza( 4, 8 ) << std::endl; return 0; }
|
|
dovah993 Temat założony przez niniejszego użytkownika |
» 2016-01-03 12:58:24 Dzięki. |
|
« 1 » |