将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*

convert int to string then join another variable to create a full extension, then convert it to const_char*

本文关键字:然后 转换 扩展名 char const 变量 字符串 int 连接 另一个 创建      更新时间:2023-10-16

当我尝试从变量中获取数据以将其放入playsond函数时出现此错误:

cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'LPCWSTR {aka const wchar_t*}
cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'LPCWSTR {aka const wchar_t*}
cannot convert 'LPSTR {aka char*}' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'BOOL PlaySoundW(LPCWSTR, HMODULE, DWORD)'|invalid operands of types 'const char*' and 'const char*' to binary 'operator+'|

我有一个 c++ 项目,我正在处理从 1-5 之间的随机数中自动选择的声音。我正在尝试将变量从 int 更改为字符串,然后更改为 const_char*,然后在文件上放置一个.wav扩展名并将其放入函数中以自动播放随机数.wav文件。

基本上我想创建一个 var,它是一个可以用于此函数的字符串:

PlaySound(TEXT(var), NULL, SND_FILENAME | SND_ASYNC);

函数示例:

class carolTracks
{
public:
void track()
{
int num = 1;
string tracknum = to_string(num);
string tracknumext = ".wav";
cout <<tracknum<<endl;
cout <<tracknumext<<endl;
//LPSTR chtracknum = (const_cast<char*>(tracknum.c_str()+tracknumext.c_str()));
//PlaySound(TEXT(chtracknum), NULL, SND_FILENAME | SND_ASYNC);
}
};

您正在使用基于charstd::string,但您正在尝试使用基于TCHARPlaySound()版本,并且显然是在使用定义UNICODE进行编译,以便TCHAR映射到wchar_tPlaySound()映射到PlaySoundW()。 您正在尝试在预期数据wchar_t的地方使用char数据,这正是转换错误所抱怨的。

您还滥用了字符串的c_str()方法以及TEXT()宏。

只需改用std::wstring,直接调用PlaySoundW(),例如:

class carolTracks
{
public:
void track()
{
int num = 1;
std::wstring tracknum = std::to_wstring(num);
std::wstring tracknumext = L".wav";
std::wcout << tracknum << std::endl;
std::wcout << tracknumext << std::endl;
std::wstring filename = tracknum + tracknumext;
PlaySoundW(filename.c_str(), NULL, SND_FILENAME | SND_ASYNC);
}
};

或者,如果您想继续使用std::string,只需直接拨打PlaySoundA()

class carolTracks
{
public:
void track()
{
int num = 1;
std::string tracknum = std::to_string(num);
std::string tracknumext = ".wav";
std::cout << tracknum << std::endl;
std::cout << tracknumext << std::endl;
std::string filename = tracknum + tracknumext;
PlaySoundA(filename.c_str(), NULL, SND_FILENAME | SND_ASYNC);
}
};

建议你使用宽版本wstring(而不是窄string(与PlaySoundW中的LPCWSTR参数兼容。 所以你的 LPSTR chtracknum 也应该很宽并且 const 与wstring中的c_str()兼容,所以你需要LPCWSTR chtracknum(在你开始使用wstring而不是字符串之后(

相关文章: