0

我正在尝试实现一个包含一个 valarray 和 2 个定义其大小的整数的类。我的 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 个参数的函数

文档说我可以用至少 5 种不同的方式声明一个 valarray,但只有默认的构造函数有效。我到处寻找,但找不到任何有用的信息。任何帮助,将不胜感激。

4

1 回答 1

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);
于 2013-05-08T16:22:40.790 回答