Функция в C++ не видит динамический массив

72
22 августа 2021, 21:50

Программа находит все перестановки n элементов. В функции perm() в условии пишет, что идентификатор chosen не определен. Объясните пожалуйста в чем проблема и как ее решить.

#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
int n;
void perm();
vector<int> permutation;
int main()
{
    cin >> n;
    bool *chosen = new bool[n+1];
    perm();
    delete[] chosen;
}
void perm()
{
    if (permutation.size() == n) {
        for (auto c : permutation) {
            cout << c << " ";
        }
        cout << "\n";
    }else {
        for (int i = 1; i <= n; i++) {
            if (chosen[i]) continue;
            chosen[i] = true;
            permutation.push_back(i);
            perm();
            chosen[i] = false;
            permutation.pop_back();
        }
    }
}
Answer 1

Как то так

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int>v(n);
    for (int i = 0; i < v.size(); i++)
        v[i] = i + 1;
    do {
        for (const auto& item: v)
            cout << item << ' ';
        cout << endl;
    } while(next_permutation(v.begin(), v.end()));
    return 0;
}
Answer 2

Имя chosen видно только в функции main, потому что сущность с таким именем объявлена внутри нее. В другие функции, даже если они вызываются из main, имя chosen попасть не может. Его видимость ограничено main.

Для того чтобы chosen стало видно в функции perm, нужно его "поднять" в область видимости, общую для main и perm. В данном случае глобальную область видимости в которой уже находятся имена n и permutation.

READ ALSO
c++ , struct, разбитие строки

c++ , struct, разбитие строки

здраствуйте форумчане, суть моего вопроса состоит в том что надо разбить строку сисволом '=' из переменой env и записать в структуру block

132
Есть ли ошибки или проблемы в коде

Есть ли ошибки или проблемы в коде

Я начал изучать C++ ООПИ придумал вот такой пример с фабриками по добыче угля и железа

189
QTreeView с QCheckBox

QTreeView с QCheckBox

Не понимаю как реализовать QTreeView с checkboxКак обработать событие установки и снятия "галочки"

169
Как получить сообщение всем потокам?

Как получить сообщение всем потокам?

Например я получаю из очереди сообщение и хочу его разослать всем потокамЯ думал про общую память, но вроде вдруг не все потоки успеют использовать...

139