error C2039: “AddString”: 不是“ATL::CStringT<BaseType,StringTraits>”的成员
时间: 2023-12-18 07:05:59 浏览: 182
这也是一个 Visual C++ 的编译错误。这个错误是由于你尝试在 `CStringT` 类型的对象上调用 `AddString` 方法,但是 `CStringT` 没有定义这个方法,所以编译器报错。
`AddString` 是一个在对话框和列表框等控件上使用的方法,它不适用于 `CStringT` 类型的对象。如果你想将一个字符串添加到 `CStringT` 对象中,你可以使用 `operator+=` 或者 `Append` 方法。
例如,如果你原来的代码是这样的:
```cpp
CStringT<BaseType, StringTraits> str = "hello";
str.AddString("world");
```
你需要将其改为这样:
```cpp
CStringT<BaseType, StringTraits> str = "hello";
str += "world";
```
或者是这样:
```cpp
CStringT<BaseType, StringTraits> str = "hello";
str.Append("world");
```
这样就能解决这个编译错误了。
相关问题
((CComboBox*)GetDlgItem(IDC_COMBO_COM))->AddString(commName);
这是一个 MFC(Microsoft Foundation Class)框架下的代码,用于向对话框中名为 IDC_COMBO_COM 的下拉框控件中添加一个字符串。具体来说,它将上一个代码段中枚举到的串口名称 commName 添加到名为 IDC_COMBO_COM 的下拉框控件中。其中,GetDlgItem(IDC_COMBO_COM) 表示获取 IDC_COMBO_COM 控件的指针,(CComboBox*) 表示将该指针强制转换为 CComboBox 类型指针,AddString(commName) 表示将 commName 字符串添加到下拉框中。这个过程会在前面代码段枚举到的每个串口信息都执行一遍,从而将所有串口名称添加到下拉框中,方便用户选择。
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Hardware\\DeviceMap\\SerialComm"), NULL, KEY_READ, &hKey)) { ((CComboBox*)GetDlgItem(IDC_COMBO_COM))->ResetContent(); while (TRUE) { dwLong = dwSize = sizeof(portName); //枚举串口 if (ERROR_NO_MORE_ITEMS == ::RegEnumValue(hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize)) { break; } ((CComboBox*)GetDlgItem(IDC_COMBO_COM))->AddString(commName); if(flag == FALSE) { flag = TRUE; } i++; } //关闭注册表 RegCloseKey(hKey); }
这段代码是在 Windows 平台下使用注册表枚举串口并将它们添加到 ComboBox 控件中,具体做法为:
1. 使用 RegOpenKeyEx 函数打开注册表,找到 HKEY_LOCAL_MACHINE 下的 "Hardware\\DeviceMap\\SerialComm" 键。
2. 使用 RegEnumValue 函数枚举该键下的值,获取串口名字和对应端口号。
3. 将串口名字添加到 ComboBox 控件中。
4. 最后关闭注册表。
这段代码使用了 MFC 库中的一些函数和类,如 CComboBox 和 GetDlgItem,是一个典型的 MFC 程序的写法。其中 flag 是一个标志位,用于控制只添加一个串口名到 ComboBox 中。如果 flag 已经被设置为 TRUE,则不再添加串口名到 ComboBox 中。
阅读全文