Morfeo XP
13-01-2010, 16:10
Salve
Ho un problema con una classe template con un attributo static di tipo generico.
Riporto una classe d'esempio che presenta lo stesso preoblema.
#ifndef TESTCLASS_H_
#define TESTCLASS_H_
template <class T> class TestClass
{
public:
void setVar(T);
private:
static T var;
};
template<class T> void TestClass<T>::setVar(T v)
{
var = v;
}
#endif
mentre questo è il main:
#include "TestClass.h"
int main()
{
TestClass<int> test;
test.setVar(1);
return 0;
}
La classe TestClass ha un attributo static di tipo generico, ed un metodo (non statico) per impostare l'attributo.
Nel monento in cui compilo il seguente codice (gcc v4.4.1) ottengo il seguente errore "undefined reference to `TestClass<int>::var'" in corrispondenza dell'istruzione "var = v;" del metodo setVar.
Come posso risolvere?
Il problema, credo sia dovuto al fatto che essendo l'attributo var di tipo generico e statico, è condiviso da tutte le istanze della classe. Trattandosi di una classe template, nulla mi vieterebbe di creare una istanza del tipo TestClass<char>, per questo, immagino, il compilatore mi segnala quel errore.
Ho un problema con una classe template con un attributo static di tipo generico.
Riporto una classe d'esempio che presenta lo stesso preoblema.
#ifndef TESTCLASS_H_
#define TESTCLASS_H_
template <class T> class TestClass
{
public:
void setVar(T);
private:
static T var;
};
template<class T> void TestClass<T>::setVar(T v)
{
var = v;
}
#endif
mentre questo è il main:
#include "TestClass.h"
int main()
{
TestClass<int> test;
test.setVar(1);
return 0;
}
La classe TestClass ha un attributo static di tipo generico, ed un metodo (non statico) per impostare l'attributo.
Nel monento in cui compilo il seguente codice (gcc v4.4.1) ottengo il seguente errore "undefined reference to `TestClass<int>::var'" in corrispondenza dell'istruzione "var = v;" del metodo setVar.
Come posso risolvere?
Il problema, credo sia dovuto al fatto che essendo l'attributo var di tipo generico e statico, è condiviso da tutte le istanze della classe. Trattandosi di una classe template, nulla mi vieterebbe di creare una istanza del tipo TestClass<char>, per questo, immagino, il compilatore mi segnala quel errore.