I am having an issue with a coverity warning that occurs in the constructor of my C++11 class.
In the class Model, I define the type Trajectory and declare it privately.
template<unsigned int T, unsigned int K>
class Model
{
public:
    typedef Eigen::Matrix<float, DEGREE, AXIS> State;
    typedef Eigen::Matrix<float, AXIS_COUNT, K> Sample;
    typedef std::array<std::array<Sample, T>, DEGREE> Trajectory;
private:
    Settings _settings;
    State _state;
    Trajectory _trajectory;
...
Later in the constructor section I define two constructors, the second one inherits from the first one. In the first one, I initialize the _trajectory variable in the double for loop.
...
public:
    Model(const Settings& settings, const State& initialState) :
     _settings(settings),
     _state(initialState)
    {
        for (unsigned int i = 0; i < DEGREE; i++)
            for (unsigned int j = 0; j < T; j++)
                _trajectory[i][j].setZero();
    };
    Model(const Settings& settings) :
     Model(settings, State::Zero()){};
    ~Model() = default;
...
This class is called by a handler which initializes Model with the second constructor. Everything works fine, however, once I run the coverity check, I receive the following error.
Non-static class member "_trajectory._M_elems" is not initialized in this constructor nor in any functions that it calls.
It is called at the line Model(settings, State::Zero()){};
I have tried many options but I cannot figure out how to initialize _trajectory properly without receiving this error.
I have tried this:
public:
    Model(const Settings& settings, const State& initialState) :
     _settings(settings),
     _state(initialState),
     _trajectory({})
this
public:
    Model(const Settings& settings, const State& initialState) :
     _settings(settings),
     _state(initialState),
     _trajectory()
this
public:
    Model(const Settings& settings, const State& initialState) :
     _settings(settings),
     _state(initialState),
     _trajectory(Trajectory)
and other combinations. None works.
Waiting for some legend to give me a hint.
Aucun commentaire:
Enregistrer un commentaire