Проблема с областью видимости массива

У меня есть вектор в мейне, как передать его в класс? На пример в классе есть ссылка, то нужно присвоить этот класс ссылке или указателю. У меня почему что в классе не видно моего массива.

class Builder {
  shared_ptr<Unit> Sarr = arr;
  public: virtual void addWizard() = 0;
  virtual void addWorker() = 0;
  virtual void addWarrior() = 0;
  virtual void CreatGroup() = 0;
};

int main() {
  srand(time(0));
  vector<shared_ptr<Unit>> arr;
  system("pause");
}

Ответы (1 шт):

Автор решения: Harry

Поставьте себя на место компилятора. Вы читаете описание класса, натыкаетесь на какое-то arr, которое нигде жо этого не встречалось... Что ему делать?

Более того, это arr - локальная переменная в main. А представим, что перед main у вас строка -

Builder b;  

Да, я знаю, что это абстрактный класс... но представим на минуту, что он не абстрактный - как ему этот arr получить, которого и на свете-то нет?

Нет уж, будьте любезны соблюдать правила видимости... типа

class Builder {
  public:
    Builder(const shared_ptr<Unit>& arr):Sarr(arr){}
    shared_ptr<Unit> Sarr;

и после этого передавайте тот arr, который нужен и там, где он существует...

→ Ссылка