我的日程安排很紧,我对如何让这个程序运行没有任何想法。我对 c++ 和一般编程很陌生,我们刚刚学习类、重载运算符和一堆文件操作,我们必须在程序中使用它们。它很长。该程序基本上是在测试类似于 mp3 播放器(例如 ipod)的功能。这是细分:
1) 我们必须创建两个类:Tsupod 和 Songs,程序中的所有歌曲都将存储在“list.dat”中。
2)我们已经以二进制模式读取列表,写出,在列出所有存储的歌曲时读入,并使用文件操作在文件中找到我们必须在其中找到要删除或要移动的歌曲的点文件...特别是当我必须为洗牌编写函数时。
3)这些都是在五个不同的文件中完成的......显然,reinterpret_cast 的读入和写出在linux系统中不起作用,但它适用于windows。
这是我在公共成员下的歌曲课程中尝试做的事情......
//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
这是我试图实现它的 int tsupod::removeSong(string removeTitle, string emoveArtist) 中的代码 TsuPod.cpp... 字符串 removeTitle 和 remove artist 来自 main 中的函数调用:Pod.removeSong( “等等等等等等”); 其中 Pod 是 tsupod 类的对象。在 removeSong 函数中调用歌曲类,其中艺术家和标题被转换为字符数组。标志在 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++
}
}
我在这个函数中试图做的是覆盖文件中的数据,这样我就不会在文件中有任何我以后必须处理的间隙。我也尝试了很多方法来解决这个问题......重命名旧文件,然后使用旧文件名或保存信息的字符数组创建一个新文件。该程序中的歌曲对象基本上用作巨大的缓冲区来保存信息,然后将这些信息存储到文件中。
我的主要问题是我试图比较同一类的两个对象。“S”和“信息”。在说什么之前,我不允许在这个特定的任务中使用数组,因为根据我的教授练习文件操作,像我这样的学生要花大约 26 个小时在这上面。我也很确定这是我的重载 == 运算符不起作用,因为它总是会跳过每次迭代的条件。这可能是一件非常简单的事情,就像我花了 3 个小时寻找丢失的分号一样。在这种情况下,我怎样才能让这个 ==OPERATOR 工作?
如果有人真的能帮我快速解决这个问题,我会用千日的荣耀认真地赞美你,因为你救了我这个项目没有得到 A+ 的屁股。