将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
convert int to string then join another variable to create a full extension, then convert it to const_char*
当我尝试从变量中获取数据以将其放入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);
}
};
您正在使用基于char
的std::string
,但您正在尝试使用基于TCHAR
的PlaySound()
版本,并且显然是在使用定义UNICODE
进行编译,以便TCHAR
映射到wchar_t
,PlaySound()
映射到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
而不是字符串之后(
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 从/到 UTF-8/UTF-16 的转换需要(例如:utf8 -> 代码点,然后代码点到 utf16)或(例如:utf8 -> utf16)?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 检查字符串是否是数字,然后将该数字转换为 int?
- 将 char[] 数组转换为字节,然后将字节转换为 int,反之亦然
- 将多映射转换为空指针,然后转换回多映射
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 将40个字节长的数据框从十六进制转换为二进制,然后转换为十进制
- strtoull() 的输出在转换为双精度然后又转换为 uint64_t 时会失去精度
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- 将无符号字符转换为字符串,然后再次转换为无符号字符
- 获取字符数组地址,然后转换为指针字符
- 在C++中一次一行地从文本文件中读取int(好的字符,然后转换)时出现问题
- 将uchar转换为int,然后转换为字符串会导致崩溃
- 将浮点数四舍五入到小数点后一位,然后转换为字符串
- 将整数的数字拆分为向量,旋转它们,然后转换回整数
- 将向量<char>作为参数,然后转换为字符串