使用更新的 gcc 编译器从 c++ 切换到代码块,这会导致我的源代码中出现错误,这些源代码使用旧的 gcc 编译器 v

Switched to Code Blocks from c++ with updated gcc compiler which causes errors in my source code that compiled fine with the old gcc compiler v3

本文关键字:源代码 编译器 gcc 我的 错误 c++ 更新 代码      更新时间:2023-10-16

问题如下:

SendMessage(hwnd_SSMAIN_PARENTCONTAINER_RTFCONTROL,WM_SETTEXT,(WPARAM)0,(LPARAM&)webfilebuffer.str());
  1. hwnd_SSMAIN_PARENTCONTAINER_RTFCONTROL是 RTF 控件的句柄
  2. WebFileBuffer 是字符串流的类型

并且使用旧版本的 GCC 在 dev C++ 中编译良好。

我刚刚更新到代码块,并使用了开发 c++ 项目的文件菜单中的导入命令。

现在在代码块中,我收到上述发送消息的错误:

E:\Projects\PWS Source Studio 7-18-12\open-save-new dialog.h|94|error: 将类型为"std::basic_stringstream::__string_type {aka std::basic_string}"的右值表达式强制转换为键入"LPARAM& {aka long int&}"|

我刚刚开始使用较新版本的 gcc MinGW。

我在网上查找了这个错误,但没有任何发现,如果我只是查找"类型右值表达式的无效强制转换"而不是"类型为'std::basic_stringstream::__string_type {aka std::basic_string}'的右值表达式的无效强制转换"键入"LPARAM& {aka long int&}"|"

我在谷歌上找到了几件事,我试图在上面做那一行,但似乎无论我尝试做什么都不起作用。

从外观上看,我无法再将 str 转换为 lparam,并且它现在只接受 lparam 自己,即它必须是类似于 LPARAM 的东西;

而不是字符串;然后将其转换为 lparam 以便发送消息以接受它。

有人可以向我解释发生了什么以及我需要做什么才能让它工作吗?

谢谢

这样做

SendMessage(hwnd_SSMAIN_PARENTCONTAINER_RTFCONTROL,WM_SETTEXT,(WPARAM)0, 
    (LPARAM)webfilebuffer.str().c_str());

此代码将 char* 转换为 LPARAM,这应该是合法的。

您还必须更改接收消息的代码。如果您需要帮助,请发布该代码。