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

[DLL/STATICLIB] Funkcje z szablonami

Ostatnio zmodyfikowano 2012-02-20 11:41
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
[DLL/STATICLIB] Funkcje z szablonami
» 2012-02-19 15:28:24
Linkuje dll'a (wczesniej linkowalem static liba) z funkcjami z szablonami. Kod dll'a:
C/C++
#include "cppmain.h"

template < class __str > void Set_Title( __str title )
{
    SetConsoleTitle( title );
}

void SetTextColor( COLOR col )
{
    HANDLE hand;
    hand = GetStdHandle( STD_OUTPUT_HANDLE );
    if( col == BG_RED ) SetConsoleTextAttribute( hand, BACKGROUND_RED );
   
    if( col == BG_GREEN ) SetConsoleTextAttribute( hand, BACKGROUND_GREEN );
   
    if( col == BG_BLUE ) SetConsoleTextAttribute( hand, BACKGROUND_BLUE );
   
    if( col == BG_INTENSE ) SetConsoleTextAttribute( hand, BACKGROUND_INTENSITY );
   
    if( col == FG_RED ) SetConsoleTextAttribute( hand, FOREGROUND_RED );
   
    if( col == FG_GREEN ) SetConsoleTextAttribute( hand, FOREGROUND_GREEN );
   
    if( col == FG_BLUE ) SetConsoleTextAttribute( hand, FOREGROUND_BLUE );
   
    if( col == FG_INTENSE ) SetConsoleTextAttribute( hand, FOREGROUND_INTENSITY );
   
}

void Pause()
{
    getch();
}

void Wait( int __ms )
{
    Sleep( __ms );
}

void Write( char * __t )
{
    cout << __t;
}

template < typename varG > varG GetVar()
{
    int var;
    cin >> var;
    return var;
}

W naglowku są tylko deklaracje i enum koloru.

Log:

Kompilator: Default compiler
Building Makefile: "C:\DevCpp\Projekty\CPPtest\Makefile.win"
Wykonywanie  make...
make.exe -f "C:\DevCpp\Projekty\CPPtest\Makefile.win" all
g++.exe main.o  -o "CPPC test.exe" -L"C:/DevCpp/lib" ../CPPConsole/CPPConsole.a 

main.o(.text+0x2c):main.cpp: undefined reference to `void Set_Title<char*>(char*)'
collect2: ld returned 1 exit status

make.exe: *** ["CPPC] Error 1

Wykonanie zakończone

P-50992
DejaVu
» 2012-02-19 15:36:25
Szablony nie są eksportowalne - one muszą być w plikach nagłówkowych.
P-50994
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-02-19 15:40:21
Stworzylem sobie naglowek z szablonami i "include'owałem" go do projektu.

Look:
C/C++
enum COLOR
{
    BG_RED,
    BG_GREEN,
    BG_BLUE,
    BG_INTENSE,
    FG_RED,
    FG_GREEN,
    FG_BLUE,
    FG_INTENSE
};

/*Podstawowe*/

template < class __str > void Set_Title( __str title );
void SetTextColor( COLOR col );
void Pause();
void Wait( int __ms );
void Write( char * __t );
template < class varG > varG GetVar();
P-50997
malan
» 2012-02-19 17:46:52
W pliku nagłówkowym musi być definicja szablonu.
P-51003
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-02-19 18:16:01
Jaka definicja? Przecież mam: "template < class __str > void Set_Title( __str title );"

EDIT:
Chodzi ci o całą funkcje? Czy co
P-51004
akwes
» 2012-02-19 18:55:33
Deklaracja
C/C++
extern int i;
bool IsSomething( int );
bool GoGoGo( int costam );

Definicja
C/C++
int a = 10;
int Get( int a )
{
    return 4 + a;
}
P-51007
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-02-20 07:06:31
Akwes, wiem ale czy to znaczy że musze całą funkcje z szablonem definiować w nagłówku?
P-51081
npHard
» 2012-02-20 11:10:44
A wiesz czym są szablony i w jaki sposób kompilator zamienia je na kod wynikowy?
P-51092
« 1 » 2
  Strona 1 z 2 Następna strona