c++ fstream 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ fstream 的问题相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

bool isInt(const char* ch);//判断输入是否是整数
void getPrime(int N, vector<int> &primes);//获取比N小的所有素数
void writeSum(vector<int> primes, fstream file, int N);//把和式写入文件
bool isPrime(int n,vector<int> primes);//判断是否是素数

int main(int argc,const char* argv[])
int N;
fstream file(argv[2], ios::out|ios::trunc);
if (!isInt(argv[1]))
file<<"wrong input!"<<endl;
file.close();
return 0;
N = (int)argv[1];
vector<int> primeList;//比N小的素数
getPrime(N, primeList);
writeSum(primeList, file, N);
return 0;

bool isInt(const char* ch)//判断输入是否是整数
int j;
for (j=0; ch[j]!='/0'; j++)
if (!(ch[j]>='0' && ch[j]<='9'))
return false;
return true;

void getPrime(int N, vector<int> &primes)//获取比N小的所有素数
int n,j=0;
primes.push_back(2);
for (n=3; n<=N; n+=2)//判断n是否是素数
while(1)//判断n能否被第j项整出(只需算到n的平方根)
if (n%primes.at(j)==0) j=0; break;
if (primes.at(j) * primes.at(j) > n)//不能被比自己平方根小的素数整除一定是素数
primes.push_back(n);
j=0;
break;

bool isPrime(int n,vector<int> primes)//判断是否是primeList中的素数
int j;
for (j=primes.size()-1; j>=0; j--)//从大到小
if (n==primes.at(j)) return true;
return false;

void writeSum(vector<int> primes, fstream file, int N)//把和式写入文件
int n;
int j;
int a, b;
for (n=4; n<=N; n+=2)
for (j=0; j<=primes.size()-1; j++)
a=primes.at(j);
b=n-a;
if (isPrime(b, primes))
file<<n<<" = "<<a<<" + "<<b<<endl;


为什么会出现错误
c:\program files (x86)\microsoft visual studio 10.0\vc\include\fstream(1347): error C2248: “std::basic_ios<_Elem,_Traits>::basic_ios”: 无法访问 private 成员(在“std::basic_ios<_Elem,_Traits>”类中声明)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios(176) : 参见“std::basic_ios<_Elem,_Traits>::basic_ios”的声明
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> 此诊断出现在编译器生成的函数“std::basic_fstream<_Elem,_Traits>::basic_fstream(const std::basic_fstream<_Elem,_Traits> &)”中
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]

void writeSum(vector<int> primes, fstream file, int N)//把和式写入文件

这一句中把fstream file改成fstream &file。
不过具体怎么解释我也说不清楚,应该是fstream管理着流,所以不能直接传值复制而应该用引用吧。
不过你的程序还是有bug。
不是很明白,求解
参考技术A 我记得 头文件应该是ofsream吧?? 看c++ primer

以上是关于c++ fstream 的问题的主要内容,如果未能解决你的问题,请参考以下文章

C++文件流的C++ 中 *fstream 操作

C++(八):fstream读写操作

C++ fstream 混淆

C++,fstream 对象作为引用传递给函数,常量?

C++中fstream

使用 fstream 从 C++ 中的 .txt 文件获取文本的问题