这个为什么是open error啊 想知道哪里错了怎么改


#include<bits/stdc++.h>
#include <fstream>
#include <algorithm>    // std::sort
using namespace std; 
class AbsCollection{
protected:
    int *iPtr;        //指向数组的指针
    int last;        //数组最后一个元素的位置
    int maxSize;    //数组总体长度
public:
    AbsCollection(int size = 100){
        maxSize = size;
        iPtr = new int[maxSize];
        last = -1;
    };
    virtual ~AbsCollection() {};
    void OutputSet();  //输出集合中元素
};
 
void AbsCollection::OutputSet()
{
    cout<<"The number of elements:"<<last+1<<endl;
    for(int i=0;i<=last;i++)
    {
        cout<<iPtr[i]<<" ";
    }
    cout<<endl;
}
class Set:public AbsCollection
{
private:
    char *fileName; //存放数据的文件
public:
    Set(int size = 100, const char *szFileName="");//从文件读取数据存入数组(要判断是否有重复元素)
    virtual ~Set();        //析构函数,释放内存并将数据写入文件
    void insert(int x);    
    void erase(int x);
    int isInSet(int x);     //判断x是否已经存在于集合中
    friend ostream& operator<<(ostream& os, Set& s);
    void intersetion(Set &s);//求集合的交(*this与s的交,结果放在*this中)
    void operator+(Set &s);     //求集合的并(*this与s的并,结果放在*this中)
    void diff(Set &s);         //求集合的差(*this与s的差,结果放在*this中)
    Set& operator=(Set &s);  //赋值拷贝函数
    void sort();             //将集合中元素从大到小排序
};
 
int Set::isInSet(int x)
{
    int flag = 0;
    for(int i=0; i<last+1; i++)
    {
        if(x==iPtr[i])
            flag = 0;
        else
            flag = 1;
    } 
    return flag; 
}
void Set::insert(int x)
{
    if(!isInSet(x)){
        if(last+1<maxSize){
            iPtr[++last]  =  x; 
        }
        else{
            Set tempSet(maxSize+1);
            for(int i = 0;i<= last;i++){
                tempSet.iPtr[i] = iPtr[i];
                tempSet.last++;
            }
            delete []iPtr;
            last = -1;
            iPtr = new int[++maxSize];
            for(int i = 0;i<= tempSet.last;i++){
                iPtr[i] = tempSet.iPtr[i];
                last++;
            }
            last++;
            iPtr[last] = x;
        }
    }
}
Set::Set(int size, const char *szFileName):AbsCollection(size)
{   
    if(szFileName =="")
    {
        fileName=NULL;
        return;
    }
    fileName = new char[strlen(szFileName)];
    fstream fs(szFileName,ios::in);
    if(!fs.is_open())
    {
        cout<<"open error!"<<endl;
        abort();
    } 
    int x;
    while(fs>>x)
    {
        if(!isInSet(x))
        {
            insert(x);
        }
    }
    fs.close();
}
Set::~Set()
{    
    if(fileName)
    {
        fstream fs(fileName,ios::out|ios::trunc);
        for(int *ip=iPtr;ip<=iPtr+last;)
        {
            fs<<*ip++<<" ";
        }
        fs.close();
        delete fileName;
    }
    if(iPtr)
    {
        delete []iPtr;
    }
}
void Set::erase(int x)
{
 
    for(int i = 0;i<=last;i++){
        if(iPtr[i]==x){
            break;
        }
        if(i<=last){
            while(i!=last){
                iPtr[i]=iPtr[i++];
            }
        }
    }
    last--;
}
ostream& operator<<(ostream& os, Set& s)
{
 
    for(int i = 0;i<=s.last;i++)
    {
        os<<s.iPtr[i]<<" ";
    }
    return os;
}
void Set::intersetion(Set &s)
{
    Set tempSet(maxSize);
    for(int i = 0;i<=last;i++)
    {
        if(s.isInSet(iPtr[i]))
        {
            tempSet.insert(iPtr[i]);
        }
    }
    *this = tempSet;
}
void Set::operator+(Set &s){
    for(int i=0;i<=s.last;i++){
        if(!isInSet(s.iPtr[i])){
            insert(s.iPtr[i]); 
        } 
    }
}
void Set::diff(Set &s)
{
    Set tempSet(maxSize);
    tempSet = *this;
    for(int i=0;i<=s.last;i++)
    {
        if(isInSet(s.iPtr[i]))
        {
            tempSet.erase(s.iPtr[i]);
        }
    }
    *this = tempSet;
 
}
Set& Set::operator=(Set &s)
{
    if(iPtr) delete []iPtr;
    maxSize = s.maxSize;
    iPtr = new int[maxSize];
    last = s.last;
    for(int i=0;i<=last;i++)
    {
        iPtr[i]=s.iPtr[i];
    }
    return *this;
} 
void Set::sort()
{
    std::sort(iPtr,iPtr+last+1,greater<int>());
}
int main()
{
    Set set1(0,"f1.txt");
    set1.insert(30);
    set1.OutputSet();
}
 
 

fstream fs(szFileName, ios::in);这里,szFileName是绝对路径吗?
(1)文件必须要存在
(2)如果szFileName是绝对路径,检查路径是否正确,如果路径正确,尝试把路径中的\改成 /
(3)如果是相对路径,文件需要跟代码在一个文件夹下。

fstream fs(szFileName,ios::in);
f1.txt文件和工程文件在同一个目录下吗?如果不是,你就要写相对于工程文件所在目录的路径,或者用绝对路径,否则编译器找不到这个文件

因为你的f1.txt文件不存在

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632