Ошибка: определение функции здесь не допускается до токена '{' в строке 6 - PullRequest
1 голос
/ 25 января 2020

Я пытаюсь получить вывод этой функции в файл .txt с именем Password.txt. Функция для печати легко выполнялась отдельно, но, как я положил внутри этой программы, чтобы получить вывод, эта ошибка показывает:

Ошибка: определение функции здесь не разрешено до токена '{' в строке 6

Я пытался удалить пустоту, но не работал.

#include<iostream>
#include <fstream>

using namespace std;
void passn1()
{
   void print(char set[],string pre,int n,int k)
   {
       if(k==0)
       {
            cout<<pre<<endl;
            return;
       }
       for(int i=0;i<n;i++)
       {
            string newp;
            newp=pre+set[i];
            print(set,newp,n,k-1);
       }
   }
   void printk(char set[],int k,int n)
   {
       print(set,"",n,k);
   }
   ptk()
   {
        char set1[]={'0','1','2','3','4','5','6','7','8','9'};
        int k=6;
        printk(set1,k,10);
   }
}
int main()
{
    ofstream fo;
    fo.open("Password.txt",ios::out);
    fo<<passn1();
    fo<<endl;
    fo.close();
    return 0;
}

Пожалуйста, помогите мне, указав, где я иду не так.

1 Ответ

5 голосов
/ 25 января 2020

Вы пытаетесь определить функцию внутри тела другой функции, что недопустимо, как предполагает ошибка компилятора.

Более того, вы не можете отправить std::ofstream вызов функции (fo<<passn1(); ), это не имеет смысла, так как тип возвращаемого значения функции void (ничего не возвращает).

Поскольку у вас есть рекурсивная функция (print()), проще всего было бы взять Выведите поток в файл (std::ofstream) в качестве параметра вашей функции и напишите pre непосредственно в него. Конечно, вам нужно будет нести этот параметр ofstream по цепочке функций.

Собрав все воедино, вы получите что-то вроде этого:

#include <iostream>
#include <fstream>

using namespace std;

void print(char set[], string pre, int n, int k, ofstream& fo)
{
    if(k==0)
    {
        fo << pre << endl;
        return;
    }
    for(int i=0;i<n;i++)
    {
        string newp;
        newp=pre+set[i];
        print(set, newp, n, k-1, fo);
    }
}

void printk(char set[],int k,int n, ofstream& fo)
{
    print(set, "", n, k, fo);
}

void ptk(ofstream& fo)
{
    char set1[]={'0','1','2','3','4','5','6','7','8','9'};
    int k=6;
    printk(set1, k, 10, fo);
}

int main()
{
    ofstream fo;
    fo.open("Password.txt",ios::out);
    ptk(fo);
    fo<<endl; // this will append an empty line at the end of the file
    fo.close();
    return 0;
}

Вывод (содержимое Password.txt) :

000000
000001
// rest of the data here...
999998
999999
...