Ik probeer Bayes++ te gebruiken om een tracker te bouwen, en ik blijf tegen het volgende probleem aanlopen:
Het lijkt er op dat een zekere base-class initializer voor een base-class zonder default constructor in een template class niet correct meegenomen wordt.
De 'Track' klasse kan via een template class een willekeurige base-class hebben.
Track.h
Hiermee wordt de constructor van SCHEME, in dit geval UD_scheme, aangeroepen:
UDFlt.hpp
UDFlt.cpp
De Kalman_state_filter is een virtual superklasse van de Linrz_kalman_filter superklasse.
Deze klasse heeft geen default constructor, en de base-class initializer Kalman_state_filter(x_size) lijkt niet goed gecompileerd te worden:
Het toevoegen van deze initializer aan mijn eigen 'Track' klasse lost het probleem op:
Iemand enig idee waarom de initializer in UDFlt.cpp niet goed opgepakt wordt?
Alvast ontzettend bedankt!
Het lijkt er op dat een zekere base-class initializer voor een base-class zonder default constructor in een template class niet correct meegenomen wordt.
De 'Track' klasse kan via een template class een willekeurige base-class hebben.
Track.h
C++:
1
2
3
4
5
6
| template <class SCHEME> class Track : public SCHEME { Track(int stateSize) : SCHEME(stateSize, stateSize) { } }; |
Hiermee wordt de constructor van SCHEME, in dit geval UD_scheme, aangeroepen:
UDFlt.hpp
C++:
1
2
3
4
| class UD_scheme : public Linrz_kalman_filter { UD_scheme (std::size_t x_size, std::size_t q_maxsize, std::size_t z_initialsize = 0); }; |
UDFlt.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| UD_scheme:: UD_scheme (std::size_t x_size, std::size_t q_maxsize, std::size_t z_initialsize) : Kalman_state_filter(x_size), // <----- q_max(q_maxsize), UD(x_size,x_size+q_max), s(Empty), Sd(Empty), d(x_size+q_max), dv(x_size+q_max), v(x_size+q_max), a(x_size), b(x_size), h1(x_size), w(x_size), znorm(Empty), zpdecol(Empty), Gz(Empty), GIHx(Empty) { } |
De Kalman_state_filter is een virtual superklasse van de Linrz_kalman_filter superklasse.
Deze klasse heeft geen default constructor, en de base-class initializer Kalman_state_filter(x_size) lijkt niet goed gecompileerd te worden:
code:
1
2
3
| Track.h:38: error: no matching function for call to ‘Bayesian_filter::Kalman_state_filter::Kalman_state_filter()’ /usr/local/include/Bayes++/bayesFlt.hpp:493: note: candidates are: Bayesian_filter::Kalman_state_filter::Kalman_state_filter(size_t) /usr/local/include/Bayes++/bayesFlt.hpp:489: note: Bayesian_filter::Kalman_state_filter::Kalman_state_filter(const Bayesian_filter::Kalman_state_filter&) |
Het toevoegen van deze initializer aan mijn eigen 'Track' klasse lost het probleem op:
C++:
1
2
3
4
5
6
| template <class SCHEME> class Track : public SCHEME { Track(int stateSize) : SCHEME(stateSize, stateSize), Kalman_state_filter(stateSize) { } }; |
Iemand enig idee waarom de initializer in UDFlt.cpp niet goed opgepakt wordt?
Alvast ontzettend bedankt!
[ Voor 3% gewijzigd door TumbleCow op 28-01-2009 15:47 ]