Playsound не воспроизводит звук - PullRequest
0 голосов
/ 30 апреля 2020

Вот что я попробовал

#include <windows.h>
#include <mmsystem.h>
#pragma comment( lib, "Winmm.lib" )
using namespace std;

int main()
{
    PlaySound(L"C:\Users\Lol\Downloads\Music\Undertale OST - Hotel Extended.wav", 0, SND_FILENAME);
    return 0;
}

И это дает мне ошибку:

неполное универсальное имя символа \ U |

Также перед этим он говорит:

игнорирование #pragma comment [-Wunknown-pragmas] |

Что здесь не так?

1 Ответ

2 голосов
/ 30 апреля 2020

неполное универсальное имя символа \ U |

В символьных и строковых литералах определенные escape-последовательности имеют особое значение для компилятора:

escape sequences

Ваш строковый литерал содержит 2 экземпляра escape-последовательности \U, однако после \U не существует числовых значений c, составляющих цифры действительного Кодовые точки Unicode, следовательно, ошибка компилятора.

Чтобы использовать действительные \ символы в строковом литерале, вам необходимо экранировать их как \\, например:

L"C:\\Users\\Lol\\Downloads\\Music\\Undertale OST - Hotel Extended.wav"

Или, если вы используете C ++ 11 или новее, вы можете использовать необработанный строковый литерал , который использует немного другой синтаксис, который не требует от вас экранирования символов вручную:

LR"(C:\Users\Lol\Downloads\Music\Undertale OST - Hotel Extended.wav)"

игнорирование #pragma comment [-Wunknown-pragmas] |

Как вы ссылаетесь на .lib файлы, очень сильно зависит от toolchain c , Ваш компилятор (вы не сказали, какой из них вы используете) говорит вам, что он не поддерживает директиву #pragma comment(lib, ...). Таким образом, вам придется ссылаться на Winmm.lib другим способом, более подходящим для компоновщика вашего конкретного набора инструментов. Прочитайте документацию для вашей цепочки инструментов.

...