我正在尝试使用以下代码初始化dMatrix
。
class BpmSolve
{
private:
const int numZPts;
Eigen::Matrix<float, 1, numZPts> dMatrix;
public:
BpmSolve(numberZPoints);
};
BpmSolve::BpmSolve(int numberZPoints)
: numZPts(numberZPoints),
{
}
代码错误,因为numZPts
是一个变量。如果我用一个整数替换numZPts
,则没有问题。
初始化此课程的正确方法是什么? C ++ 11选项很好。
感谢。
答案 0 :(得分:3)
Eigen::Matrix
是一个模板,模板参数必须在编译时可用。 numZPts
的值在编译时不可用 - 每次构造BpmSolve
对象时,它可能具有此字段的不同值,并且在编译时不知道该值。所以你要求的东西是不可能的。
答案 1 :(得分:1)
在编译时未定义numZPts
值。如果该类的所有实例碰巧在整个代码中使用该值的常量,则只需将您的类转换为由其参数化的模板:
template <int numZPts>
class BpmSolve {
private:
Eigen::Matrix<float, 1, numZPts> dMatrix;
// [...]
BpmSolve::BpmSolve(){
}
实例成为:
BpmSolve<init> instance;
而不是
BpmSolve instance(init);
如果此类继承了子类,则可能会触发进一步的更改。