Error: a function-definition is not allowed here before '{' token at line 6

Error: a function-definition is not allowed here before '{' token at line 6

我试图在名为 Password.txt 的 .txt 文件中获取此函数的输出。打印的功能很容易单独 运行 但是当我把它放在这个程序中以获得输出时,这个错误显示:

Error: a function-definition is not allowed here before '{' token at line 6

我尝试删除 void 但没有用。

#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;
}

请告诉我哪里错了。

您正试图在另一个函数的主体内定义一个函数,这是不允许的,因为编译器错误提示。

此外,您不能向 std::ofstream 发送函数调用 (fo<<passn1();),这没有意义,因为函数的 return 类型是 void ( return没什么。

因为你有一个递归函数(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