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

[c++] Szablon, dziedziczenie

Ostatnio zmodyfikowano 2016-01-07 13:31
Autor Wiadomość
break_da_funk
Temat założony przez niniejszego użytkownika
[c++] Szablon, dziedziczenie
» 2016-01-07 13:06:05
Witam!
Nie rozumiem, dlaczego linker krzyczy mi, że nie może znaleźć referencji do metody.
Poniżej kod:

Plik File1.cpp
C/C++
#include "File2.h"

int main() {
    Derived derived_obj;
    derived_obj.test();
    return 0;
}

Plik File2.cpp
C/C++
#include "File2.h"

template < class T >
void Base < T >::test( void ) {
    cout << "Testing" << endl;
}

Plik File2.h
C/C++
#ifndef FILE2_H_
#define FILE2_H_
#include <iostream>
using namespace std;

template < class T >
class Base {
    T t;
public:
    T give_me_T( void ) {
        return t;
    }
    void test( void );
    virtual ~Base() { };
};

class Derived
    : public Base < int >
{
public:
    Derived() { };
};

#endif /* FILE2_H_ */

Jeśli zmienię kod usuwając szablon (np zmieniając na int) to poprawnie uzyskuje plik wykonywalny.
Będę bardzo wdzięczny za wyjaśnienie dlaczego dziedzicząc skonkretyzowaną klasę linker nie widzi implementacji metody z klasy bazowej?...
P-143052
pekfos
» 2016-01-07 13:27:27
Szablony definiuje się w plikach nagłówkowych.
P-143055
carlosmay
» 2016-01-07 13:27:42
C/C++
#include "File2.h"

template < class T >
void Base < T >::test( void ) {
    cout << "Testing" << endl;
}
 
 Bo to jest szablon, a nie gotowa funkcja.
Umieść ją w pliku nagłówkowym.

Przykład:
Szablony funkcji w kilku plikach
P-143056
break_da_funk
Temat założony przez niniejszego użytkownika
» 2016-01-07 13:31:38
Dziękuje za odpowiedzi.
P-143057
« 1 »
  Strona 1 z 1