Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用类将歌曲添加到播放列表程序_C++_Visual Studio 2010_File_Class_Playlist - Fatal编程技术网

C++ 如何使用类将歌曲添加到播放列表程序

C++ 如何使用类将歌曲添加到播放列表程序,c++,visual-studio-2010,file,class,playlist,C++,Visual Studio 2010,File,Class,Playlist,我正在尝试修复我的“addSongtoPlaylist”函数。现在它不起作用了,我不确定我的语句在函数中是否有错,但我现在有点困在这一部分。该程序使用GUI从歌曲列表创建播放列表。我应该能够加载歌曲列表,添加、删除和播放表单中的歌曲。对于这一功能的任何帮助都将不胜感激 #include "globals.h" //some global variables are included here #include <cstdlib> //standard c library #inc

我正在尝试修复我的“addSongtoPlaylist”函数。现在它不起作用了,我不确定我的语句在函数中是否有错,但我现在有点困在这一部分。该程序使用GUI从歌曲列表创建播放列表。我应该能够加载歌曲列表,添加、删除和播放表单中的歌曲。对于这一功能的任何帮助都将不胜感激

#include "globals.h"  //some global variables are included here
#include <cstdlib>  //standard c library
#include "mediaItem.h"  //the mediaItem class  (you need to write a class that extends this class)
#include "song.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


ifstream infile;
song mySong[MAX_SONGS];
int NumberOfSongs;
int myPlaylist[MAX_PLAYLIST];
int PlaylistSize; //counter for size of playlist in array
song *newPlaylist[MAX_PLAYLIST];

bool loadSongList(string filename)
{
    infile.open(filename);
    string tempArtist, tempTitle, tempLocation;
    int i = 0;

    if (infile.fail())
    {
        cout << "The file could not be opened." << endl;
        return false;
    }
    else
    {
        cout << "File opened successfully." << endl;

        infile >> NumberOfSongs;
        infile.ignore(1);

        while (!infile.eof())
        {
            getline(infile, tempArtist);
            getline(infile, tempTitle);
            getline(infile, tempLocation);
            mySong[i].setArtist(tempArtist);
            mySong[i].setTitle(tempTitle);
            mySong[i].setLocation(tempLocation);

            i++;
        }
        infile.close();

        return true;
    }
}

int getNumberOfSongsInSongList()
{
    return NumberOfSongs;
}

string getSongNameFromSongList(int songNum)
{
    string tempArtist, tempTitle;

    tempArtist = mySong[songNum].getArtist();
    tempTitle = mySong[songNum].getTitle();

    return tempArtist + " - " + tempTitle;
}

string getSongNameFromPlaylist(int playlistSpot)
{
    string tempArtist, tempTitle;

    tempArtist = mySong[myPlaylist[playlistSpot]].getArtist();
    tempTitle = mySong[myPlaylist[playlistSpot]].getTitle();

    return tempArtist + " - " + tempTitle;
}

void addSongToPlaylist(int songNum)
{
    mySong[myPlaylist[PlaylistSize]].setArtist(mySong[songNum].getArtist());
    mySong[myPlaylist[PlaylistSize]].setTitle(mySong[songNum].getTitle());
    mySong[myPlaylist[PlaylistSize]].setLocation(mySong[songNum].getLocation());

    mySong[myPlaylist[PlaylistSize]] = mySong[songNum];
    newPlaylist[PlaylistSize] = &mySong[songNum];
    PlaylistSize++;

}

int getNumberOfSongsInPlaylist()
{
    return PlaylistSize;
}

void moveSongDownInPlaylist(int playlistSpot)
{
    int temp;
    if (playlistSpot >= PlaylistSize - 1)
        return;

    temp = myPlaylist[playlistSpot + 1];
    myPlaylist[playlistSpot + 1] = myPlaylist[playlistSpot];
    myPlaylist[playlistSpot] = temp;
}

void removeSongFromPlaylist(int playlistSpot)
{
    for (int i = playlistSpot; i < PlaylistSize; i++)
        moveSongDownInPlaylist(i);

    myPlaylist[PlaylistSize - 1] = 0;
    PlaylistSize--;
}

void clearPlaylist()
{
    for (int i = 0; i < PlaylistSize; i++)
        myPlaylist[i] = 0;

    PlaylistSize = 0;
}

void moveSongUpInPlaylist(int playlistSpot)
{
    int temp;

    if (playlistSpot == 0)
        return;

    temp = myPlaylist[playlistSpot - 1];
    myPlaylist[playlistSpot - 1] = myPlaylist[playlistSpot];
    myPlaylist[playlistSpot] = temp;
}

void playSongFromPlaylist(int playlistSpot)
{
    mySong[myPlaylist[playlistSpot]].playMedia();
}

void pauseSongFromPlaylist(int playlistSpot)
{
    mySong[myPlaylist[playlistSpot]].pauseMedia();
}

void stopSongFromPlaylist(int playlistSpot)
{
    mySong[myPlaylist[playlistSpot]].stopMedia();
}
#include“globals.h”//此处包含一些全局变量
#包含//标准c库
#包括“mediaItem.h”//mediaItem类(您需要编写一个扩展该类的类)
#包括“song.h”
#包括
#包括
#包括
使用名称空间std;
河流充填;
宋美松(MAX_SONGS),;
国际歌曲;
int myPlaylist[最大播放列表];
int播放列表大小//阵列中播放列表大小的计数器
歌曲*新建播放列表[最大播放列表];
bool loadSongList(字符串文件名)
{
infile.open(文件名);
弦乐演奏家,诱惑,模板定位;
int i=0;
if(infle.fail())
{

我怀疑您的
addSongToPlaylist
函数只需要将
songNum
添加到
myPLaylist
的末尾

它看起来也像是
myPlaylist
应该只是一个
int
数组,而不是
int*
。注意:目前您正在分配指针数组,但没有为指针分配内存

列表中的每个
int
都是一个参考
mySong
中现有条目的歌曲编号

我的建议是:

  • myPlayList
    更改为
    int
    数组,并修复所有取消引用它的代码(无处不在的
    *
  • 更改
    addSongToPLaylist
    以仅将歌曲编号添加到数组的末尾,该数组由(名称混乱的)
    playliste
    表示
如果在那之后你有问题,请询问

编辑: 由于
myPlaylist
需要是
song*myPlaylist[MAX_SONGS]
,您仍然可以执行与上面相同的操作,但您可以在
mySong
数组中添加指向歌曲的指针,而不是将歌曲编号添加到列表的末尾。类似于:

void addSongToPlaylist(int songNum)
{
    // TODO: Check PlaylistSize is less than MAX_PLAYLIST
    myPlaylist[PlaylistSize] = &mySong[songNum];
    PlaylistSize++;
}

“它不工作了”
不是一条有用的语句。什么不起作用?什么应该起作用而不是?您在编译时或运行时是否收到任何错误消息?您是否尝试过使用调试器单步调试代码?Visual Studio具有优秀的内置调试功能。如果您不知道如何使用它们,现在是学习的时候了。这就是解决此问题的代码太多。本应将歌曲添加到GUI窗体窗口中的播放列表中,我的歌曲列表将加载,但当我选择一首歌曲并尝试按下按钮时,什么也没有发生。我将收到一个错误,提示“对象引用未设置为对象的实例”与其创建硬设置任意大小的数组,为什么不使用可以根据需要调整大小的
std::vector
。我的老师想使用一个类数组,我只是在键入时将infle设置为全局数组,因为一开始我在其他函数中使用过它。但这确实不是问题。playlize的大小只是数组,我会尝试一下。这就是我的意思-
playlize
不是数组的大小。
MAX\u PLAYLIST
是数组的大小。
playlize
是您当前使用的数组的大小。我认为它以大写字母开头会让人困惑。这会使它看起来更像是一个常量或
enum
。好的,我明白你的意思。我按照你的方式尝试了代码,不再出现错误,但当我按“将歌曲添加到播放列表”时按钮,仍然没有发生任何事情。表单如何知道如何使用新数据重新显示自己?也许可以在调试器中单步执行以确认添加正在发生。您确实记得在添加新歌时将
playlize
的值增加1吗?表单知道使用我们老师编写的背景代码显示对于按钮/列表之类的。我希望他能给我们解释一下,因为我们必须围绕已经创建的东西进行编码,这不会让我们的课堂几乎没有任何空间来做不同的功能。