无法将 valarray 初始化为类的私有成员
Can't initialize valarray as private member of class
我试图实现一个类,其中包含一个valarray和2个int定义其大小。我的hpp文件看起来像这样:
class Matrix
{
public:
// Constructors
Matrix();
Matrix(int width, int height);
// Mutators
void setWidth(int width); // POST: width of the matrix is set
void setHeight(int height); // POST: height of the matrix is set
//void initVA(double width);
// Accessors
int getWidth(); // POST: Returns the number of columns in the matrix
int getHeight(); // POST: Returns the number of rows in the matrix
// Other Methods
//void printMatrix(const char* lbl, const std::valarray<double>& a);
private:
int width_;
int height_;
std::valarray<double> storage_;
};
但是,当我尝试像这样在构造函数上初始化valarray时:
Matrix::Matrix(int width, int height)
{
width_ = width;
height_ = height;
storage_(width*height);
}
我一直得到这个错误信息:
错误C2064: term不计算为带有1个参数的函数
文档说我可以用至少5种不同的方式声明一个valarray,但是只有默认的构造函数有效。我到处都找遍了,但没能找到任何有用的信息。
您实际上试图在这里调用std::valarray<double>::operator()(int)
,但不存在这样的操作符。大概,您打算使用初始化列表来代替:
Matrix::Matrix(int width, int height)
: width_(width),
height_(height),
storage_(width*height)
{
}
或者,您可以分配一个新的对象实例,但这将比使用初始化列表性能更低,因为storage_
将被默认构造,然后用新临时对象的副本替换,最后临时对象将被销毁。(一个体面的编译器可能能够消除这些步骤中的一些,但我不会依赖它。)
storage_ = std::valarray<double>(width*height);
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- C++ std::valarray 成员变量意外更改
- 无法将 valarray 初始化为类的私有成员