Ik heb het volgende probleem
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| class TestModel{
public:
TestModel():_support(this){
cout<<"TestModel created\n";
}
.
~TestModel(){
cout<<"TestModel destroyed\n";
}
.
void setValue(int newValue){
int oldValue = _value;
_value = newValue;
_support.fire("value",oldValue,_value);
}
.
inline int getValue(){return _value;}
.
inline PropertyChangeSupport<int,TestModel*> getSupport(){return _support;}
private:
int _value;
PropertyChangeSupport<int,TestModel*> _support;
};
.
.
template <typename T, typename S>
class PropertyChangeSupport{
public:
PropertyChangeSupport(const S& source);
~PropertyChangeSupport();
void addListener(const PropertyChangeListener<T,S>& l, string property);
void removeListener(const PropertyChangeListener<T,S>& l, string property);
void fire(string property, const T& oldValue, const T& newValue);
//S getSource(){return _source;}
private:
// S _source;
// vector<PropertyChangeListener<T,S> >* _listeners;
};
.
.
template <typename T,typename S>
PropertyChangeSupport<T,S>::PropertyChangeSupport(const S& source){
cout<<"PropertyChangeSupport created\n";
// _source = source;
}
.
template <typename T,typename S>
PropertyChangeSupport<T,S>::~PropertyChangeSupport(){
cout<<"PropertyChangeSupport destroyed\n";
}
.
template <typename T,typename S>
void PropertyChangeSupport<T,S>::addListener(const PropertyChangeListener<T,S>& l,string property){}
.
template <typename T,typename S>
void PropertyChangeSupport<T,S>::removeListener(const PropertyChangeListener<T,S>& l, string property){}
.
template <typename T, typename S>
void PropertyChangeSupport<T,S>::fire(string property, const T& oldValue,const T& newValue){
PropertyChangeEvent<T,S> p (_source,property,oldValue,newValue);
} |
Als ik nu een PropertyChangeSupport rechtstreeks aanmaak, dan is er niets aan de hand. Maar als ik hem maak in die TestModel, dan krijg ik problemen als ik een Model probeer aan te maken. Als ik de model niet aanmaak, dan zijn er geen problemen.
De foutmelding: undefined reference to PropertyChangeSupport<int,TestModel*>::PropertyChangeSupport[in charge](TestModel* const&);
en nog een keer bij de destructor ervan.
Als ik nou altijd die fout kreeg, dan wist ik in ieder geval dat er iets mis wat met propertyChangeSupport. Maar ik krijg dus alleen problemen als ik hem gebruik vanuit TestModel
en daarnaast maak ik ook een testmodel aan. Als ik geen testmodel aanmaak, dan is er ook niets aan de hand.
[edit]
Ik ben er intussen achter gekomen dat het heeft te maken met het compiler model voor de templates. Voor de class moet het export keyword komen te staan, maar helaas slikt g++ dit niet