Template class ze składnikiem statycznym

0

Witam. Mam taką klasę:

#ifndef MYCLASS_H
#define MYCLASS_H
//myclass.h

template <typename T>
class myClass
{
public:
    myClass();
    static const int getLicznik(){return licznik;}
private:
    static int licznik;
    T  liczba;
};

#endif // MYCLASS_H
//plik: myclass.cpp
#include "myclass.h"

template <typename T>
int myClass<T>::licznik = 0;

template <typename T>
myClass<T>::myClass()
{
  liczba *= 1,4;
  licznik ++;
}

Funkcja gówna programu wygląda jak poniżej:

#include <QtCore/QCoreApplication>
#include <iostream>

//#include "myclass.h"  // blad: undefined reference to `myClass<int>::myClass()

#include "myclass.cpp"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    myClass<int> obj1;
    myClass<int> obj2;
    myClass<double> obj3;

    std::cout << obj1.getLicznik() << std::endl;
    std::cout << obj3.getLicznik() << std::endl;
    std::cout << myClass<int>::getLicznik() << std::endl;
    return a.exec();
}

Gdy dołączam plik *.h mam błąd jak powyżej, natomiast gdy dołączę plik *.cpp wtedy wszystko jest OK. Co należy zrobić aby dołączyć plik *.h i program działał prawidłowo?
Będę wdzięczny za pomoc.

0

wkleić definicję konstruktora do jego deklaracji.

Poza tym pewnie miał być 1.4 zamiast 1,4

0

A w jakiś inny sposób można ? Pozostawiając taki układ jak jest teraz.

0

I co taka definicja w oddzielnym pliku cpp miałaby robić?
Jeżeli nie chcesz w deklaracji to umieść ten kod pod deklaracją. A jeżeli koniecznie chcesz w oddzielnym pliku to umieść go w takim, ale inkluduj go tylko w pliku nagłówkowym pod deklaracją.

0
myClass<T>::myClass()
{
  liczba *= 1,4;

Jaki sens ma to mnożenie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1