Kort samengevat zit ik met het volgende probleem: ik probeer een memberfunctie aan te roepen van een template baseclass maar de compiler pikt dit niet. De code ziet er ongeveer als volgt uit:
C++:
1
2
3
4
5
6
7
| //Abase.h
class Abase
{
public:
virtual void setval(string val) = 0;
}; |
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| //base.h
#include "Abase.h"
template <class T>
class base : Abase
{
private:
T val;
public:
void setval(T val);
};
//base.cpp
#include "base.h"
template <class T> void
base<T>::setval(T val)
{
this->val = val;
} |
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| //derivedint.h
#include "base.h"
class derivedint : public base<int>
{
private:
void setval(string val);
};
//derivedint.cpp
#include "derivedint.h"
void
derivedint::setval(string val)
{
setval(atoi(val.c_str()));
} |
Dit geeft de volgende compiler-error:
derivedint.cpp: In member function `virtual void derivedint::setval(std::string)':
derivedint.cpp: error: no matching function for call to `derivedint::setval(double)'
derivedint.cpp: note: candidates are: virtual void derivedint::setval(std::string)
Waarom kan de compiler de setval uit de template niet vinden? Het volgende wil wel compilen maar niet linken:
C++:
1
2
3
4
5
| void
derivedint::setval(string val)
{
base<int>::setval(atoi(val.c_str()));
} |