我正在尝试实现一个包含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:术语不评估为采用1个参数的函数
The documentation说我可以用至少5种不同的方式声明一个valarray,但只有默认的构造函数才能工作。我到处都看,但一直找不到任何有用的信息。任何帮助将不胜感激。
答案 0 :(得分:3)
您实际上是在这里尝试调用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);