Нужна помощь в распределении пространства для вектора в определении класса с помощью boost - PullRequest
1 голос
/ 14 сентября 2009

Я пытаюсь выделить место для типа вектора повышения в определении класса. Я не хороший программист на С ++, но показанная ниже моя лучшая попытка. Нет сообщений об ошибках, но когда я пытаюсь получить доступ к вектору из своей основной функции, он считает, что вектор имеет ноль элементов. Я знаю, что это потому, что я не сказал компилятору, сколько места нужно выделить, когда я объявил вектор в определении класса, но я не знаю, как это сделать, не получив ошибку. Я попытался обойти это, сказав, насколько я хотел этого в конструкторе, но я знаю, что компилятор воспринимает это как переопределение, которое не существует вне рамок конструктора. Может ли кто-нибудь привести меня в правильном направлении? Заранее спасибо.

namespace ublas = boost::numeric::ublas;

class Phase
{
 ublas::vector<cdouble> lam;
public:
 // Constructor:
 Phase()
 {
  ublas::vector<cdouble> lam(2);

  for(int i = 0; i < 2; i++)
  {
   lam(i) = 1.0;
  }
 }
 // Destructor:
 ~Phase() {}
 // Accessor Function:
 ublas::vector<cdouble> get_lam() { return lam; }
};

1 Ответ

7 голосов
/ 14 сентября 2009

В вашем конструкторе вы создаете локальную переменную lam, которая затеняет переменную класса lam. Вы хотите инициализировать вектор в списке инициализации конструктора:

Phase() : lam(2)
{
 for(int i = 0; i < 2; i++)
 {
  lam(i) = 1.0;
 }
}

При вызове инициализируемого класса вызывается конструктор vector вместо конструктора по умолчанию для класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...