Не могу инициализировать valarray как частного члена класса

Я пытаюсь реализовать класс, который содержит 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 аргумент

Документация говорит, что я могу объявить valarray как минимум 5 разными способами, но работает только стандартный конструктор. Я искал везде, но не смог найти никакой полезной информации. Любая помощь будет оценена.

0

Решение

Вы на самом деле пытаетесь вызвать 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);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]