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
我试图在名为 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