Я создаю базовую концепцию музыкального проигрывателя с использованием Pascal, но я изо всех сил пытаюсь показать альбомы внутри него. Полученная ошибка говорит: «(134, 29) Ошибка: невозможно прочитать или записать переменные этого типа». Я предполагаю, что это говорит, потому что я использую массив в массиве, и ему трудно отображать оба одновременно (хотя я хочу, чтобы он отображал только альбомы, а не дорожки).
Вот как выглядит мой код:
function ReadAllTrack(prompt: String): Tracks;
var
i: Integer;
trackArray: Array of Track;
trackCount: Integer;
begin
WriteLn(prompt);
trackCount := ReadIntegerGreaterThan1('Please enter the number of tracks you would like to add: ');
Setlength(trackArray, trackCount);
for i := 0 to trackCount - 1 do
begin
WriteLn('Enter the details for your track:');
trackArray[i] := ReadTrack();
end;
result := trackArray;
end;
function ReadAlbum(): Album;
begin
result.albumName := ReadString('Album name: ');
result.artistName := ReadString('Artist name: ');
result.albumGenre := ReadGenre('Genre:');
result.trackCollection := ReadAllTrack('Track Collection:');
end;
function ReadAllAlbums(): Albums;
var
i: Integer;
albumArray: Array of Album;
albumCount: Integer;
begin
albumCount := ReadIntegerGreaterThan1('Please enter the number of albums you would like to add: ');
Setlength(albumArray, albumCount);
for i := 0 to albumCount - 1 do
begin
WriteLn('Enter the details for your album:');
albumArray[i] := ReadAlbum();
end;
result := albumArray;
end;
procedure DisplayAlbumOptions(listOfAllAlbums: Albums);
var
userInput: Integer;
begin
WriteLn('1. Display all albums');
WriteLn('2. Display all albums for a genre');
userInput := ReadIntegerRange('Please enter a number (1, 2) to select: ', 1, 2);
case userInput of
1: WriteLn(listOfAllAlbums); //Error: Can't read or write variables of this type
end;
end;
По сути, он запрашивает у пользователя 5 вариантов:
1. Добавить альбомы
2. Показать альбомы
и т.д.
Если пользователь выбирает 1, программа попросит пользователя ввести количество альбомов, которые он хочет ввести. Затем для каждого альбома будет предложено ввести данные, а затем треки.
Затем, если пользователь выбирает 2, программа попросит пользователя выбрать либо отображение каждого отдельного альбома, либо отображение всех альбомов для одного жанра (я буду работать над этим после решения этой проблемы). Сначала я думал, что это будет так же просто, как WriteLn(TheAlbumArray);
, но оказалось, что это было сложнее, чем я думал, потому что я не думаю, что для программы возможно отобразить это таким образом. Я попытался разделить альбомы и дорожки так, чтобы они отображались только при использовании WriteLn(TheAlbumArray);
, но это было невозможно, потому что дорожки все еще должны быть «внутри» альбома, чтобы при отображении альбомов и выборе одного из их, то будет отображать треки ....
Любая помощь или предложение по этому и / или второму будет высоко ценится ^^