VS C++常用错误与解决方法

无法找到 v143 的生成工具(平台工具集 =“v143”)

若要使用 v143 生成工具进行生成,请安装 v143 生成工具。或者,可以升级到当前 Visual Studio 工具,方式是通过选择“项目”菜单或右键单击该解决方案,然后选择“重定解决方案目标”。 MatchTool C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets 439

<!-- Error if toolset not found -->
<VCMessage Code="MSB8020" Type="Error" Arguments="$(_PlatformToolsetShortName);$(PlatformToolset)" Condition="'$(DesignTimeBuild)' != 'true' and '$(_ToolsetFound)' != 'true'" />

在这里插入图片描述

‘strdup’: The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details

这个编译警告信息指出 'strdup' 函数的使用已经不推荐,因为它是 POSIX 标准的一部分,而不是 ISO C 或 C++ 标准。为了保持与 ISO C 和 C++ 标准的一致性,建议使用 _strdup 函数,这是 Microsoft 特定实现的 ISO 兼容版本。

在 Microsoft Visual C++ 编译器中,_strdupstrdup 的 ISO C++ 兼容替代品。如果你的代码中使用了 strdup,并且你希望消除这个警告,你可以将其替换为 _strdup

以下是如何替换的示例:

// 使用 POSIX 标准的名称
char* myString = strdup("Hello World");

// 替换为 ISO C++ 标准的名称
char* myString = _strdup("Hello World");

请注意,_strdup 函数是 Microsoft 的扩展,可能在其他编译器或平台上不可用。如果你的代码需要在多种平台上兼容,你可能需要使用其他方法来复制字符串,例如使用 std::string 或者 std::strcpy 结合 malloc

例如,使用 std::string

#include <string>

std::string original = "Hello World";
std::string copy = original; // 复制字符串

或者使用 strcpymalloc

#include <cstring>
#include <cstdlib>

const char* original = "Hello World";
char* copy = (char*)malloc(strlen(original) + 1);
strcpy(copy, original); // 复制字符串

记得在使用 malloc 分配内存后,需要在适当的时候使用 free 来释放内存。

Windows 下Qt Creator构建错误👎 error: LNK1158: 无法运行“rc.exe” 的问题

在 Windows 操作系统中,使用 Qt Creator 配合 MSVC(Microsoft Visual C++ Compiler)构建套件进行项目编译时,若遇到错误信息 “error: LNK1158: 无法运行‘rc.exe’”,这通常意味着 Qt Creator 未能正确识别或定位到资源编译器的路径。这一问题通常是由于 Qt Creator 未被正确配置以找到 rc.exe 文件所导致的。

针对这一问题,网络上的解决方案建议将 rc.exe 和 rcdll.dll 文件复制到 Qt Creator 安装目录下的相应构建套件的 bin 文件夹中,以及 Visual Studio 安装目录下的 VC/bin 文件夹中。具体路径为:

  • *D:\Qt\Qt5.12.10\5.12.10\msvc2017\bin*
  • *C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin*

然而,当计算机上安装了多个版本的 Windows Kits 时,可能会存在多个 rc.exe 文件。在这种情况下,需要确定与当前项目兼容的特定 Windows Kits 版本,并确保 Qt Creator 能够找到与之对应的 rc.exe。

为了解决这一问题,可以采取以下步骤来定位正确的 Windows Kits 版本及其对应的 rc.exe 文件:

  1. 检查 Qt Creator 项目文件(.pro 文件)或其他相关配置文件,确认项目所需的 Windows Kits 版本。
  2. 在系统路径中搜索 rc.exe 文件,使用命令行工具(如 cmd 或 PowerShell)执行 where.exe rc.exe 命令,列出所有找到的 rc.exe 文件路径。
  3. 根据项目需求,选择正确的 rc.exe 文件路径,并将其路径添加到 Qt Creator 的构建套件配置中,或者直接复制到上述提到的 Qt Creator 或 Visual Studio 的 bin 目录下。

通过上述步骤,可以确保 Qt Creator 在构建过程中能够正确调用到匹配的资源编译器,从而解决 LNK1158 错误。在实际操作中,可能需要根据具体的环境配置和项目需求进行适当的调整。

  1. 已安装Visual Studio 2015
  2. 已安装Qt Creator
  3. Windows 10 Pro x64

查看当前Qt Creator所用的MSVC构建套件所使用的Windows Kits版本信息

打开 Qt Creator,任意新建一个工程,在套件选择的界面中可以看到这里探测到了我的MSVC2015,这里我只选择MSVC2015 64bit这个套件,如图1所示。

工程创建完毕之后,我们进行构建操作,可以发现此时显示出了错误信息 error: LNK1158: 无法运行“rc.exe”

此时我们点击 左侧的 项目,然后找到我们所使用的构建套件下的Build,并将构建环境详情展开,如图所示。

从环境变量列表中可以看到,这里有很多环境变量信息,有些环境变量是系统中已经存在的,有些是Qt Creator所添加的。这里我们着重关注 下面2个环境变量

  • WindowsSdkDir
  • WindowsSDKVersion

在我的计算机中,环境变量 WindowsSdkDir 对应的是 C:\Program Files (x86)\Windows Kits\10\ ,表示当前的WindowsSDK的目录,环境变量WindowsSDKVersion 对应的是 10.0.18362.0\ ,从这连个内容我就可以知道Qt 在这个构建套件下所需要的rc.exe文件应该是 **C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\ ,**我们进入这个目录查看一下,如图所示。

这里有一个arm、arm64和x86、x64,这里我们只需要关注x86和x64即可,例如这里我们工程用的是MSVC2015 x64构建套件,所以我们进入到x64目录下找到rc.exe和rcdll.dll这俩文件,将其拷贝到

[QtCreator安装目录]\[Qt版本号]\[构建套件]\bin 这个目录下即可,我的电脑上的对应目录是 D:\Applications\QtCreator\5.12.2\msvc2015_64\bin ,如图所示,是拷贝后的结果。

拷贝完成之后,再次回到我们的Qt Creator中进行构建,就可以发现此时已经OK了。

总体思路

  1. 从Qt Creator工程的环境变量中定位 Windows Kits版本信息
  2. 复制对应的rc和rcdll到Qt目录下对应的构建套件的bin目录中

错误 C2102 “&”要求左值

### 回答1: MFC 中的列表控件是一个非常常用的控件,可以用来显示和编辑大量的数据。下面是一个简单的 MFC 列表控件使用实例: 1. 创建一个对话框,并在上面添加一个列表控件控件。 2. 在对话框类的头文件中添加以下代码: ```cpp #include <afxcmn.h> class CMyDlg : public CDialogEx { public: CMyDlg(CWnd* pParent = nullptr); enum { IDD = IDD_MY_DIALOG }; private: CListCtrl m_listCtrl; }; ``` 3. 在 OnInitDialog 函数中对列表控件进行初始化: ```cpp BOOL CMyDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 添加列 m_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100); m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_LEFT, 100); // 添加行 m_listCtrl.InsertItem(0, _T("张三")); m_listCtrl.SetItemText(0, 1, _T("20")); m_listCtrl.InsertItem(1, _T("李四")); m_listCtrl.SetItemText(1, 1, _T("25")); // 设置风格 m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT); return TRUE; } ``` 4. 编译并运行程序,即可看到列表控件中显示了两行数据,每行有两列。 以上就是一个简单的 MFC 列表控件使用实例。需要注意的是,列表控件还可以进行更多的高级操作,比如排序、编辑、拖放等。如果需要进行更复杂的操作,可以参考 MFC 文档或在网上查找相关资料。 ### 回答2: MFC(Microsoft Foundation Classes)是一套由微软提供的C++编程类库,用于开发Windows桌面应用程序。其中包含了许多常用的控件,例如列表控件(List Control)。 列表控件是一个显示数据列表的窗口部件,以表格的形式展示数据。我们可以在MFC应用程序中使用列表控件来显示和编辑数据,如需使用列表控件,我们可以按照以下步骤进行操作: 1. 创建一个MFC应用程序并打开资源视图。 2. 在资源视图中选择对话框,并双击以打开对话框设计视图。 3. 在对话框中插入一个列表控件。可以在工具箱中找到列表控件,并将其拖拽到对话框上。 4. 双击列表控件以进入其属性界面。在属性页中,我们可以设置列表控件的样式、布局和其他属性,如行数、列数、标题等。 5. 在应用程序的视图类中,打开对话框类的.cpp文件。可以在OnInitDialog()函数中编写如下代码来初始化列表控件: ```cpp // 获取列表控件对象指针 CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1); // 设置列表控件为报告视图 pListCtrl->ModifyStyle(0, LVS_REPORT); // 插入列 pListCtrl->InsertColumn(0, _T("列1"), LVCFMT_LEFT, 100); pListCtrl->InsertColumn(1, _T("列2"), LVCFMT_LEFT, 100); // 插入行 pListCtrl->InsertItem(0, _T("数据1")); pListCtrl->SetItemText(0, 1, _T("数据2")); ``` 这段代码将列表控件设置为报告视图并插入了两列,并在第一行插入了数据。你可以根据自己的需求进行修改。 6. 运行应用程序,你将看到一个显示有数据的列表控件。你可以使用列表控件的其他成员函数来增加、删除、编辑和获取列表中的数据。 总结而言,使用MFC中的列表控件需要进行资源的设计和对控件的属性设置,然后在视图类中初始化和操作列表控件即可。通过这些步骤,我们可以方便地在MFC应用程序中使用列表控件来展示和操作数据。 ### 回答3: MFC(Microsoft Foundation Classes)是一套用于开发Windows桌面应用程序的C++编程框架。列表控件MFC中一个常用的控件,用于显示和管理一组数据。 使用MFC列表控件的实例可以包括以下几个步骤: 1. 创建列表控件: 在MFC应用程序中,可以通过资源视图中的控件编辑器来添加列表控件。也可以在代码中调用列表控件的Create函数动态创建。创建列表控件时,需要设置控件的样式和属性,如多选或单选、排序等。 2. 添加列标题: 通过列表控件的InsertColumn函数,可以添加列标题。可以为每个列指定标题文本和宽度等属性,以便用户能够区分和查看列表中的数据。 3. 添加列表项: 通过列表控件的InsertItem函数,可以添加列表项。可以为每个列表项设置图标、文本和子项等属性。列表项可以根据需要进行增删改查操作。 4. 添加子项: 通过列表控件的SetItemText函数,可以为列表项添加子项。子项可以存储更多的数据,如日期、价格等。可以为每个子项设置文本和自定义格式。 5. 响应用户交互: 可以在代码中为列表控件注册相应的消息响应函数,如双击列表项触发的消息、拖拽列表项触发的消息等。通过这些函数,可以实现列表控件的各种交互和操作。 6. 数据管理: 可以通过代码操作列表控件中的数据,如获取选择的列表项、修改列表项的文本等。还可以通过数据结构或数据源来管理列表控件中的数据,如从数据库读取数据并显示在列表中。 通过以上步骤,就可以使用MFC列表控件在应用程序中展示和管理一组数据。列表控件在实际应用中非常常见,可用于显示文件列表、日程安排、任务状态等各种信息。可以根据需要进行自定义,满足不同应用场景的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值