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

[C++] Szablony funkcji w wielu plikach

Ostatnio zmodyfikowano 2016-01-03 12:58
Autor Wiadomość
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:


C/C++
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

C/C++
#include <iostream>
#include "clamp.hpp"

template < class typ >
int main()
{
    std::cout << clamp( 2, 3, 4 );
    getchar();
}

CLAMP.CPP

C/C++
#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
C/C++
#ifndef clamp_hpp
#define clamp_hpp

template < class typ >
typ clamp( typ a, typ b, typ c );

#endif
P-142707
1aam2am1
» 2016-01-02 17:18:04
Umieść ciało funkcji w pliku nagłówkowym
P-142708
carlosmay
» 2016-01-02 19:38:01
C/C++
template < class typ > // tak to raczej nie da rady
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).
P-142719
dovah993
Temat założony przez niniejszego użytkownika
» 2016-01-02 19:44:34
Więc jak to powinno być poprawnie zrobione?
P-142720
1aam2am1
» 2016-01-02 20:09:29
C/C++
#include <iostream>

//clamp.hpp
#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


//main
int main( void ) {
    std::cout << clamp < int >( 2, 3, 4 );
    getchar();
    return 0;
}
P-142722
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
C/C++
#pragma once
template < typename Typ >
Typ wieksza( Typ a, Typ b );
 
Plik nagłówkowy definicja.h
C/C++
#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
C/C++
#include <iostream>
#include "definicja.h"
int main()
{
    std::cout << wieksza( 4, 8 ) << std::endl;
    return 0;
}
 
P-142724
dovah993
Temat założony przez niniejszego użytkownika
» 2016-01-03 12:58:24
Dzięki.
P-142766
« 1 »
  Strona 1 z 1