为什么我的 fstream 访问不能编译?
Why doesnt my fstream access compile?
我有问题。我正在用 C++ 编写程序,我想访问一些文件,所以我使用 class fstream。好吧,这里一切正常,但是当我要编译程序时它崩溃并给我一个错误。
我把连接文件的代码放在这里:
#include <iostream>
#include <fstream>
#include <map>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <string.h>
using namespace std;
fstream file1, file2;
void access();
int main(){
access();
file1.close();
file2.close();
}
void access(){
file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
cout << "Opening File1..." << endl;
file2("C:\data\file2.dat",ios::in | ios::out | ios::binary);
cout << "Opening File2..." << endl;
}
它给了我以下错误:
no match for call to '(std::fstream {aka std::basic_fstream<char>}) (const char [20], std::_Ios_Openmode)'
所以我尝试这样访问方法:
void access(){
string f1 = "C:\data\file1.dat";
string f2 = "C:\data\file2.dat";
file1(f1.c_str(),ios::in | ios::out | ios::binary);
cout << "Opening File1..." << endl;
file2(f2.c_str(),ios::in | ios::out | ios::binary);
cout << "Opening File2..." << endl;
}
但它也给我一个错误。其内容如下:
no match for call to '(std::fstream {aka std::basic_fstream<char>}) (const char*, std::_Ios_Openmode)'
我不知道会发生什么,如有任何帮助,我们将不胜感激。
非常感谢。
尽管看起来像,但这不是对构造函数的调用,因为它已经在全局 space.
中声明和构造
file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
这是对 operator()
的调用。尝试使用 open
代替:
file1.open("C:\data\file1.dat",ios::in | ios::out | ios::binary);
您的问题确实说明了为什么两个 std::fstream
变量应该是全局变量。所以你可以让它们成为 access
.
中的局部变量
这是一个例子;请注意,我没有改动程序的其余部分,尽管它包含一些其他奇怪的东西(例如,包括很多你从未使用过的 headers):
#include <iostream>
#include <fstream>
#include <map>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <string.h>
using namespace std;
void access();
int main(){
access();
}
void access(){
fstream file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
cout << "Opening File1..." << endl;
fstream file2("C:\data\file2.dat",ios::in | ios::out | ios::binary);
cout << "Opening File2..." << endl;
}
此语法无效:
file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
要么使用这些参数构造流以进行初始化:
fstream file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
或者您打开一个已经构建好的流:
file1.open ("C:\data\file1.dat",ios::in | ios::out | ios::binary);
由于 file1 已经在 access()
之外定义,第二个选项在这里似乎最合适。
我有问题。我正在用 C++ 编写程序,我想访问一些文件,所以我使用 class fstream。好吧,这里一切正常,但是当我要编译程序时它崩溃并给我一个错误。
我把连接文件的代码放在这里:
#include <iostream>
#include <fstream>
#include <map>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <string.h>
using namespace std;
fstream file1, file2;
void access();
int main(){
access();
file1.close();
file2.close();
}
void access(){
file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
cout << "Opening File1..." << endl;
file2("C:\data\file2.dat",ios::in | ios::out | ios::binary);
cout << "Opening File2..." << endl;
}
它给了我以下错误:
no match for call to '(std::fstream {aka std::basic_fstream<char>}) (const char [20], std::_Ios_Openmode)'
所以我尝试这样访问方法:
void access(){
string f1 = "C:\data\file1.dat";
string f2 = "C:\data\file2.dat";
file1(f1.c_str(),ios::in | ios::out | ios::binary);
cout << "Opening File1..." << endl;
file2(f2.c_str(),ios::in | ios::out | ios::binary);
cout << "Opening File2..." << endl;
}
但它也给我一个错误。其内容如下:
no match for call to '(std::fstream {aka std::basic_fstream<char>}) (const char*, std::_Ios_Openmode)'
我不知道会发生什么,如有任何帮助,我们将不胜感激。
非常感谢。
尽管看起来像,但这不是对构造函数的调用,因为它已经在全局 space.
中声明和构造file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
这是对 operator()
的调用。尝试使用 open
代替:
file1.open("C:\data\file1.dat",ios::in | ios::out | ios::binary);
您的问题确实说明了为什么两个 std::fstream
变量应该是全局变量。所以你可以让它们成为 access
.
这是一个例子;请注意,我没有改动程序的其余部分,尽管它包含一些其他奇怪的东西(例如,包括很多你从未使用过的 headers):
#include <iostream>
#include <fstream>
#include <map>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <string.h>
using namespace std;
void access();
int main(){
access();
}
void access(){
fstream file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
cout << "Opening File1..." << endl;
fstream file2("C:\data\file2.dat",ios::in | ios::out | ios::binary);
cout << "Opening File2..." << endl;
}
此语法无效:
file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
要么使用这些参数构造流以进行初始化:
fstream file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
或者您打开一个已经构建好的流:
file1.open ("C:\data\file1.dat",ios::in | ios::out | ios::binary);
由于 file1 已经在 access()
之外定义,第二个选项在这里似乎最合适。