OpenCV KalmanFilterを内部に持つクラスを作成しました。どのテンプレートパラメータもなければ、うまくコンパイルできます。OpenCV Kalman Filterとテンプレートパラメータを使用しようとしたときにコンパイルエラーが発生しました。cv :: Matt
class ClassOkay
{
public:
struct ClassState
{
cv::KalmanFilter kalmanFilter;
double time;
};
void doSomething();
private:
ClassState state;
};
void ClassOkay::doSomething()
{
//Okay
cv::Mat& x = state.kalmanFilter.statePost;
x.at<double>(0) = 5;
//Okay
state.kalmanFilter.statePost.at<double>(0) = 5;
}
ここで、このテンプレートのタイプ名を持つオブジェクトはありませんが、テンプレートパラメータを追加すると、もはやコンパイルされません。
template<typename SubState>
class ClassNotOkay
{
public:
struct ClassState
{
cv::KalmanFilter kalmanFilter;
double time;
};
void doSomething();
private:
ClassState state;
};
template<typename SubState>
void ClassNotOkay<SubState>::doSomething()
{
//Okay
cv::Mat& x = state.kalmanFilter.statePost;
x.at<double>(0) = 5;
//Not okay
state.kalmanFilter.statePost.at<double>(0) = 5;
}
私がstatePostにアクセスしようとする最後の行は、cv :: Matとして認識されないようです。次のようにコンパイラエラーがある:
../Base.h: In member function ‘void ClassNotOkay<SubState>::doSomething()’:
../Base.h:169:37: error: expected primary-expression before ‘double’
state.kalmanFilter.statePost.at<double>(0) = 5;
^
../Base.h:169:37: error: expected ‘;’ before ‘double’
もはやat
はstatePost
の方法であることを理解しているように私には本当に奇妙なようです。なぜ、どのようなアイデアが起こっているのですか?
私は答えを知らないが、FWIW、私は、Visual Studio 2010を使用して私のマシン上でこのコードを試してみました私はあなたが描いている振る舞いを見ませんでした。 – Aenimated1
@ Aenimated1 ...まあ、これは珍しいことです。ですから、もし助けがあれば、gcc 4.8.4を使ってLinuxでコンパイルしています。私の仕事の誰もが困惑しています。 –