Код ошибки: int temp = ptr[i]; ... ptr[r] = temp;
, вы назначаете Song
и int
, что невозможно.
Дополнительно , я настоятельно рекомендую использовать std::vector< Song >
для хранения. Ваш код более надежен и менее вероятен сбой, плюс вектор всегда знает количество содержащихся в нем песен. Пример
#include <vector>
...
struct Song { ... };
...
void shuffle(std::vector< Song >& mySongs, ...)
{
/* shuffle mySongs somehow. */
...
}
mySongs.size()
содержит количество песен, и вы можете получить доступ к каждой песне с mySongs[index]
(или лучше mySongs.at(index)
), как и ожидалось. Добавление новых песен осуществляется mySongs.push_back(someSong)
.
Теперь к вашему вопросу : Как мне перетасовать мой вектор песен. Ну ...
/* at start of program. */
srand(unsigned(time(NULL)));
...
void shuffle(std::vector< Song >& mySongs)
{
std::random_shuffle(mySongs.begin(), mySongs.end());
}
делает свое дело. Смотрите здесь .
Запись песни в поток может быть выполнена путем определения функции, подобной этой:
std::ostream& operator << (std::ostream& osr, const Song& mySong)
{
osr << mySong.title << ' ' << mySong.artitst << ' ' << mySong.mem;
return osr;
}
Теперь вы можете счастливо сделать std::cout << mySong << std::endl
.