我时间紧迫,不知道如何让这个程序正常工作。我对C++和编程一般都很新,我们现在才开始学习类、重载运算符和一些文件操作,而我们必须在我们的程序中使用这些技术。程序非常庞大,基本上是测试类似于mp3播放器(如iPod)的功能。以下是详细说明:
1)我们必须创建两个类:Tsupod和Songs,程序中所有歌曲将保存在“list.dat”文件中。
2)我们必须以二进制模式读取列表,在列出存储的所有歌曲时进行写入和读取,并使用文件操作查找文件中需要删除或移动的歌曲位置……特别是当我需要编码洗牌函数时。
3)这些都在五个不同的文件中完成……显然,在Linux系统中,使用reinterpret_cast进行读取和写入不起作用,但在Windows系统中可以。
下面是我在公共成员下尝试在Songs类中实现的内容...
我在这个函数中的目标是覆盖文件中的数据,以免以后需要处理文件中的空缺。我已经尝试了很多方法...重命名旧文件并创建一个新文件,或者使用字符数组来保存信息。在此程序中,Songs对象基本上用作大型缓冲区,用于保存将存储到文件中的信息。
我遇到的主要问题是,我正在尝试比较同一类别的两个对象:“S”和“info”。在说任何话之前,对于这个特定的任务,我不允许使用数组,因为整个重点是让像我这样的学生花费26个小时以上(根据我的教授)练习文件操作。我也相当确定我的重载==运算符不起作用,因为它会在每次迭代时跳过条件。这可能是我错过的非常简单的东西,就像那一次我花了3个小时寻找一个缺少的分号一样。如何使这个==运算符在这种情况下工作?
如果有人能够真正帮助我快速解决这个问题,我将真诚地赞扬你,因为你拯救了我的屁股,使我没有获得A+的荣耀。
1)我们必须创建两个类:Tsupod和Songs,程序中所有歌曲将保存在“list.dat”文件中。
2)我们必须以二进制模式读取列表,在列出存储的所有歌曲时进行写入和读取,并使用文件操作查找文件中需要删除或移动的歌曲位置……特别是当我需要编码洗牌函数时。
3)这些都在五个不同的文件中完成……显然,在Linux系统中,使用reinterpret_cast进行读取和写入不起作用,但在Windows系统中可以。
下面是我在公共成员下尝试在Songs类中实现的内容...
//overloaded operator '==' ...
bool operator ==( Songs& b)
{
if (strcmp(Title, b.Title) > 1)
return false;
else if (strcmp(Artist, b.Artist) > 1)
return false;
else if (size != b.size)
return false;
else
return true;
}
private:
char Artist[30];
char Title[30];
int size;
};#endif // SONGS_H_INCLUDED
这里是TsuPod.cpp的代码,位于int tsupod::removeSong(string removeTitle, string emoveArtist)中,我正在尝试实现它……从main函数调用的字符串removeTitle和removeArtist:Pod.removeSong("blah", "blahblah")。其中Pod是tsupod类的对象。在removeSong函数中调用了song类,将艺术家和标题转换为字符数组。songFile中的标记被重置。
for(int i = 0; i < num_songs; i++)
{
songFile.read(reinterpret_cast<char*>(&info), sizeof(info));
pos = sizeof(info) * count;
songfile.seekp(pos - sizeof(info));
if (S == info)
{
num_songs--;
}
else
{
songFile.write(reinterpret_cast<char*>(&info), sizeof(info));
count++
}
}
我在这个函数中的目标是覆盖文件中的数据,以免以后需要处理文件中的空缺。我已经尝试了很多方法...重命名旧文件并创建一个新文件,或者使用字符数组来保存信息。在此程序中,Songs对象基本上用作大型缓冲区,用于保存将存储到文件中的信息。
我遇到的主要问题是,我正在尝试比较同一类别的两个对象:“S”和“info”。在说任何话之前,对于这个特定的任务,我不允许使用数组,因为整个重点是让像我这样的学生花费26个小时以上(根据我的教授)练习文件操作。我也相当确定我的重载==运算符不起作用,因为它会在每次迭代时跳过条件。这可能是我错过的非常简单的东西,就像那一次我花了3个小时寻找一个缺少的分号一样。如何使这个==运算符在这种情况下工作?
如果有人能够真正帮助我快速解决这个问题,我将真诚地赞扬你,因为你拯救了我的屁股,使我没有获得A+的荣耀。