教你如何使用 Visual Studio IDE 正确的进行 C++ 桌面开发

news2025/8/2 9:43:05

目录

先决条件

入门

一、演练:使用项目和解决方案 (C++)

准备工作

创建项目

在 Visual Studio 中创建项目

组织项目和文件

向项目添加类

向主函数添加测试代码

向项目添加测试代码

生成并运行应用项目

生成并运行此项目

二、演练:生成项目 (C++)

先决条件

修复编译错误

三、演练:测试项目 (C++)

先决条件

在调试模式下运行程序

四、演练:调试项目 (C++)

先决条件

修复含有 bug 的程序


先决条件

Visual Studio 集成开发环境 (IDE) 提供一组功能,帮助你管理大型和小型代码项目、写入和重构代码以及使用静态分析和功能强大的调试工具检测和更正错误。本文重在介绍在管理项目,写入、测试和调试代码,并将代码部署到其他计算机的过程中所需的每个步骤

 

如果尚未安装 Visual Studio,请在Visual studio2022官网进行下载安装。官网打开->下载 Visual Studio-> 安装 Visual Studio 安装程序->选择工作负载-> 选择各个组件(可选)->安装语言包(可选)-> 选择安装位置(可选)->开始开发、

入门

若要开始使用 Visual Studio IDE 生成 C++ 应用,请按顺序完成下面的过程。

一、演练:使用项目和解决方案 (C++)

介绍如何在 Visual Studio 中创建 C++ 项目,添加代码,然后生成并运行该项目。 本演练中的项目是一个程序,该程序跟踪正在玩各种纸牌游戏的玩家数量。

在 Visual Studio 中,可以将工作组织为项目和解决方案。 一个解决方案可以包含多个项目,例如,一个 DLL 和一个引用该 DLL 的可执行文件。如果尚未安装,请按照教程完成安装后的后续步骤操作,确保 C++ 组件正确安装且正常工作。

了解 C++ 语言的基础知识以及编译器、链接器和调试程序的用途会很有帮助。 本教程还假定你熟悉 Windows 及其菜单、对话框的使用方式、、

准备工作

  1. 若要完成准备工作,需要 Visual Studio 2017 或更高版本,如果尚未安装,请按照教程完成安装后的后续步骤操作,确保 C++ 组件正确安装且正常工作。
  2. 了解 C++ 语言的基础知识以及编译器、链接器和调试程序的用途会很有帮助。 本教程还假定你熟悉 Windows 及其菜单、对话框的使用方式

创建项目

若要创建项目,请先选择项目类型模板。 对于每种项目类型,Visual Studio 会设置编译器设置,并根据类型生成起始代码,稍后可修改该代码。 根据使用的 Visual Studio 版本,以下步骤会有所不同。 若要查看 Visual Studio 首选项的文档,请使用“版本”选择器控件。 它位于此页面上目录表的顶部。

在 Visual Studio 中创建项目

  1. 在主菜单中,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框。
  2. 在对话框顶部,将“语言”设置为“C++”,将“平台”设置为“Windows”,并将“项目类型”设置为“控制台”。
  3. 从筛选的项目类型列表中,选择“控制台应用”,然后选择“下一步” 。 在下一页中,输入“游戏”作为项目名称。
  4. 可以接受“位置”下拉列表中的默认位置、输入其他位置或者选择“浏览”按钮,浏览要保存项目的目录 。
  5. 创建项目时,Visual Studio 将该项目放入一个解决方案。 默认情况下,解决方案的名称与项目名称相同。 可以更改“解决方案名称”框中的名称,但是对于此示例,请保留默认名称。
  6. 选择“创建”按钮创建项目。
  7. Visual Studio 创建新的解决方案和项目文件,并为它生成的 Game.cpp 源代码文件打开编辑器。

组织项目和文件

可以使用“解决方案资源管理器”来组织和管理解决方案中的项目、文件及其他资源。

本部分演练演示如何将类添加到项目中。 添加类时,Visual Studio 添加相应的 .h 和 .cpp 文件。 可以在“解决方案资源管理器”中查看结果。

向项目添加类

  1. 如果 Visual Studio 中未显示“解决方案资源管理器”窗口,请在菜单栏上选择“视图”>“解决方案资源管理器”。

  2. 在“解决方案资源管理器”中,选择“游戏”项目 。 在菜单栏上选择“项目”>“添加类”。

  3. 在“添加类”对话框中的“类名”框内输入“Cardgame”。 请勿修改默认的文件名和设置。 选择“确定” 按钮。

    Visual Studio 创建新的文件并将其添加到项目。 可以在“解决方案资源管理器”窗口中查看这些文件。 Cardgame.h 和 Cardgame.cpp 文件在编辑器中打开。

  4. 编辑 Cardgame.h 文件,并进行以下更改:

  • 在类定义的左大括号之后添加两个私有数据成员。

    int players;
    static int totalParticipants;
    
  • 修改 Visual Studio 生成的默认构造函数。 在 public: 访问说明符之后,将发现如下所示的行:

    Cardgame();

    修改构造函数,使其带有一个类型为 int、名为“players”的参数。

    Cardgame(int players);
  • 在默认析构函数之后,为名为 GetParticipants 的 static int 成员函数添加内联声明,该成员函数没有参数且返回 totalParticipants 值。

    static int GetParticipants() { return totalParticipants; }

    对 Cardgame.h 文件进行更改之后,该文件应类似于以下代码:

#pragma once
class Cardgame
{
    int players;
    static int totalParticipants;
public:
    Cardgame(int players);
    ~Cardgame();
    static int GetParticipants() { return totalParticipants; }
};

#pragma once 行通知编译器仅包含一次头文件。

  1. 选择编辑窗格顶部的“Cardgame.cpp”选项卡,打开它进行编辑。

  2. 删除文件中的所有内容,并将其替换为以下代码

#include "pch.h" // 在Visual Studio 2019中删除此行
#include "Cardgame.h"
#include <iostream>

using namespace std;

int Cardgame::totalParticipants = 0;

Cardgame::Cardgame(int players)
    : players(players)
{
    totalParticipants += players;
    cout << players << "玩家开始了新游戏  "
         << totalParticipants << " 球员总数." << endl;
}

Cardgame::~Cardgame()
{
}

输入代码时,可以使用自动完成功能。 例如,如果使用键盘输入此代码,可以输入 pl 或 tot,然后按 Ctrl+空格键。 自动完成功能可为你输入 players 或 totalParticipants。 

向主函数添加测试代码

向应用添加一些测试新函数的代码

向项目添加测试代码

// Game.cpp : 定义控制台应用程序的入口点.
//

#include "pch.h" // 在Visual Studio 2019中删除此行
#include "Cardgame.h"
#include <iostream>

using namespace std;

void PlayGames()
{
    Cardgame bridge(4);
    Cardgame blackjack(8);
    Cardgame solitaire(1);
    Cardgame poker(5);
}

int main()
{
    PlayGames();
    return 0;
}

此代码会将测试函数 PlayGames 添加到源代码,并在 main (主函数)内调用。 

生成并运行应用项目

接下来,生成项目并运行应用

在菜单栏上,依次选择“生成”>“生成解决方案” 。

来自生成的输出显示在“输出”窗口中。 如果生成成功,输出应类似于

1>------ Build started: Project: Game, Configuration: Debug Win32 ------
1>pch.cpp
1>Cardgame.cpp
1>Game.cpp
1>Generating Code...
1>Game.vcxproj -> C:\Users\<username>\source\repos\Game\Debug\Game.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

“输出”窗口可以根据不同的生成配置显示不同步骤,但是如果项目生成成功,最后一行应类似于上面显示的输出。

如果生成未成功,请将你的代码与前面步骤中显示的代码进行比较。

4 players have started a new game.  There are now 4 players in total.
8 players have started a new game.  There are now 12 players in total.
1 players have started a new game.  There are now 13 players in total.
5 players have started a new game.  There are now 18 players in total.
  1. 按任意键关闭控制台窗口。

恭喜,你已成功生成应用项目和解决方案。 继续完成下面的教程,详细了解如何在 Visual Studio 中生成 C++ 代码项目。

二、演练:生成项目 (C++)

先决条件

具备 C++ 语言的基础知识

修复编译错误

  1. 在 Games.cpp 中,删除最后一行中的分号,使其类似于以下语句:

    return 0
  2. 在菜单栏上,依次选择“生成”>“生成解决方案” 。

  3. “错误列表”窗口中的消息指示生成项目过程中出现了错误。 该声明类似于以下错误消息:

    error C2143: syntax error: missing ';' before '}'

    若要查看有关此错误的帮助信息,请在“错误列表”窗口中将其突出显示,然后选择 F1 键。

  4. 将分号重新添加到导致语法错误的行的末尾:

    return 0;
  5. 在菜单栏上,依次选择“生成”>“生成解决方案” 。

    “输出”窗口中的消息指示项目已成功编译。

1>------ Build started: Project: Game, Configuration: Debug Win32 ------
1>Game.cpp
1>Game.vcxproj -> C:\Users\<username>\source\repos\Game\Debug\Game.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

三、演练:测试项目 (C++)

在调试模式下运行程序时,可使用断点来暂停程序以检查变量和对象的状态是怎样的。

在本教程中,将在程序运行时观察变量的值,并推导出为什么该值不是想要的的值

先决条件

具备 C++ 语言的基础知识。

完成了上述部分的操作

在调试模式下运行程序

  1. 打开 Game.cpp 进行编辑。

  2. 选择此代码行:

    Cardgame solitaire(1);

  3. 要在该行上设置断点,请在菜单栏上选择“调试”>“切换断点”,或选择 F9 键。 行的左侧出现一个红色圆圈,它表示已设置断点。 要删除断点,可再次选择菜单命令或 F9 键。

    如果使用鼠标,也可通过单击左边距来设置或删除断点。

  4. 在菜单栏上,依次选择“调试”>“启动调试”,或选择 F5 键。

    由于程序处于“中断”模式,因此当程序到达断点行时,执行将暂停。 代码行左侧的黄色箭头表示它是要执行的下一行。

  5. 要检查变量 Cardgame::totalParticipants 的值,请将指针移到 Cardgame 上,然后将其移到工具提示窗口左侧的扩展控件上。 显示变量名称 totalParticipants 及其值 12。

    打开变量 Cardgame::totalParticipants 的快捷菜单,然后选择“添加监视”以在“监视 1”窗口中显示该变量。 也可突出显示一个变量并将其拖动到“监视 1”窗口。

  6. 要转到下一代码行,请在菜单栏上依次选择“调试”>“逐过程执行”或选择 F10 键。

    “监视 1”窗口中 Cardgame::totalParticipants 的值现在显示为 13。

  7. 打开 return 0; 语句的快捷菜单,然后选择“运行到光标处”。 代码左侧的黄色箭头指向要执行的下一语句。

  8. Cardgame 终止时,Cardgame::totalParticipants 数应减少。 此时,Cardgame::totalParticipants 应等于 0,因为已删除所有 Cardgame 实例,但“监视 1”窗口指示 Cardgame::totalparticipants 等于 18。 此差异表明代码中存在 bug。 可

  9. 要停止该程序,请在菜单栏上选择“调试”>“停止调试”或选择 Shift+F5 键盘快捷方式

四、演练:调试项目 (C++)

先决条件

  • 假定你具备 C++ 语言的基础知识。

修复含有 bug 的程序

  1. 若要查看销毁 Cardgame 对象时发生的情况,请查看 Cardgame 类的析构函数。

    在菜单栏上,选择“视图”>“类视图”。

    在“类视图”窗口中,展开“游戏”项目树并选择“Cardgame”类来显示类成员和方法 。

    打开“~Cardgame(void)”析构函数的快捷菜单,然后选择“转到定义” 。

  2. 若要在 Cardgame 终止时减少 totalParticipants,请在 Cardgame::~Cardgame 析构函数的左大括号和右大括号之间键入以下代码。

totalParticipants -= players;
cout << players << "玩家已经完成了他们的游戏。 现在有 "
     << totalParticipantotalParticipants -= players;

在对 Cardgame.cpp 文件进行更改之后,该文件应类似于以下代码:

#include "Cardgame.h"
#include <iostream>

using namespace std;

int Cardgame::totalParticipants = 0;

Cardgame::Cardgame(int players)
    : players(players)
{
    totalParticipants += players;
    cout << players << " 玩家已经完成了他们的游戏。 现在有 "
         << totalParticipants << " 球员总数." << endl;
}

Cardgame::~Cardgame()
{
    totalParticipants -= players;
    cout << players << "玩家已经完成了他们的游戏。 现在有  "
         << totalParticipants << " 球员总数." << endl;
}
  1. 在菜单栏上,依次选择“生成”>“生成解决方案” 。

  2. 生成完成后,可以通过选择菜单栏上的“调试”>“启动调试”或选择 F5 键在调试模式下运行此解决方案。 程序在第一个断点处暂停程序。

  3. 若要逐步执行此程序,请在菜单栏上,选择“调试”>“逐过程执行”或选择 F10 键。

    请注意,执行每个 Cardgame 构造函数后,totalParticipants 的值会增大。 在 PlayGames 函数返回时,由于每个 Cardgame 实例都超出范围且被删除(并且调用析构函数),因此 totalParticipants 会减小。 在刚要执行 return 语句前,totalParticipants 等于 0。

  4. 继续逐步执行此程序直到其退出,或通过在菜单栏上选择“调试”>“运行”或选择 F5 键来使其运行。

完结撒花!!下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

改良海量数据存储的若干的手段-转变数据垃圾为黄金

教材篇 直到翻看了后面章节&#xff0c;才注意到封面上面的标语&#xff0c;中文意思是“禁止倾倒数据垃圾&#xff0c;违者务必读此书&#xff01;” 大致祖师爷对杂乱无序的数据垃圾深恶痛绝&#xff0c;在这点上大凡上了点年头的数据工作者都是深有体会~ 直到翻看了后面章…

三相和单相智能微型断路器功能有区别吗?

安科瑞 华楠 ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品&#xff0c;产品由智能微型断路器与智能网关两部分组成&#xff0c;可用于对用电线路的关键电气因素&#xff0c;如电压、电流、功率、温度、漏电、能耗等进行实时监测&#xff0c;具有远程…

渗透测试与漏洞扫描的区别

企业通常将漏洞扫描视为渗透测试的替代方法。这种认识是错误的。具有网络安全意识的组织必须在其业务流程中包括这两项活动&#xff0c;并确保它们协同工作。错过其中之一会大大降低 Web 应用程序安全性和网络安全性的安全状况。渗透测试和漏洞扫描也被单独视为合规性要求&…

【TFS-CLUB社区 第6期赠书活动】〖uni-app跨平台开发与应用从入门到实践〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 抽奖方式与截止时间❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》 内…

Redis事务操作

Redis事务操作 每个公司每个项目可能有不同的引入方式&#xff0c;但是最基本的都大差不差&#xff0c;所以这里只展示最基本的。 redis事务定义 redis事务是一个单独的隔离操作&#xff0c;事务中的所有命令都会序列化、按顺序地执行&#xff0c;事务在执行的过程中&#x…

Rancher - v2.6.5升级v2.7.0

Rancher&#x1f449;v2.6.5升级v2.7.0 时间&#xff1a;2022年11月18日16:37:50 2022-11-17凌晨&#xff0c;rancher推出了新的稳定版&#xff1a;v2.7.0。 一、为什么要升级到v2.7.0&#xff1f;v2.6.5有什么严重的问题吗&#xff1f; ● 对于私有云来说&#xff0c;一般生…

C51项目 - 可调万年历

目录一、实验目的二、实验仪器三、实验效果预览1.显示效果2.调节效果四、实验原理五、单片机代码1.头文件包含2.类型定义3.时钟模块4. 液晶显示模块5.温度传感器模块6. 红外通讯模块7.开机初始化8.特殊功能函数9.代码段常量10.完整代码一、实验目的 使用51单片机作为主控芯片&…

Hybrid app混合开发的一些经验和总结

随着5G技术的发展和移动终端普及&#xff0c;移动设备的便捷性和网络的泛在化&#xff0c;移动应用已广泛应用于电子商务、电子政务、医疗和辅助教学中。 智能手机等移动终端的存储、运算能力不断增强&#xff0c;但其显示、输入等不如PC灵活&#xff0c;对操作界面灵活性有强…

Redis 搭建高可用集群

、单个redis服务搭建请参考&#xff1a;redis服务搭建 2、在/usr/local下创建目录redis-cluster,并在redis-cluster下创建 6379、6380、6381目录以及data、temp目录 # cd /usr/local # mkdir redis-cluster --其他文件创建类似&#xff0c;此处不一一写出 3、复制安装后的re…

[笔记]快乐的Linux命令行《二》文件系统中跳转

系列文章目录 [笔记]快乐的Linux命令行《一》LInux系统简介以及什么是shell [笔记]快乐的Linux命令行《二》文件系统中跳转 文章目录系列文章目录前言一、文件系统中跳转1.1 理解文件系统树Linux基本文件系统树目录介绍与Windows的异同1.2 当前工作目录pwd 显示当前工作目录1.…

CSS基础入门

CSS基础入门 1.官方文档 1.CSS 指的是层叠样式表* (Cascading Style Sheets) 2.地址: https://www.w3school.com.cn/css/index.asp 2.为什么需要 CSS 1.在没有 CSS 之前&#xff0c;我们想要修改 HTML 元素的样式需要为每个 HTML 元素单独定义样式属性&#xff0c;费心费力…

手把手教你如何编写一个Makefile文件

一、概念理解&#xff08;彩蛋藏在某个地方&#xff09; 1.1 什么是Makefile&#xff1f; C语言中&#xff0c;我们使用visual studio开发软件时候&#xff0c;写程序开始时候都会创建一个project项目文件&#xff0c;然后在文件里面编译 .h 和 .c 的文件。在Linux中&#xf…

给大家免费发布几款苹果CMSv10模板影视主题,附带教程和演示截图

苹果CMS是优秀的开源PHP建站系统,在主流建站系统中特色鲜明,以灵活、小巧、兼容性好、负载强等优点而深受许多站长的喜爱。 很多人在运营苹果cms站点都会找模板&#xff0c;下面博主给大家推荐几款免费并且简约的模板&#xff0c;其实个人认为模板这东西不需要买太贵的&#xf…

编译安装LAMP架构搭建wordpress个人博客和discuz论坛——编译安装基于 FASTCGI 模式LAMP架构多虚拟主机WEB应用

文章目录1 实验目标2 环境准备3 实现步骤3.1.1 二进制安装3.1.2为wordprss和discuz应用准备数据库和用户帐号3.2 编译安装 httpd 2.43.3 编译安装 fastcgi 方式的 php 7.43.4 修改配置 httpd 支持 php-fpm3.5 准备wordpress和discuz! 相关文件3.6 测试访问3.7 安装成功1 实验目…

MySQL高级篇知识点——其它数据库日志

目录1.其他数据库日志1.1.日志类型1.2.日志的弊端2.慢查询日志 (slow query log)3.通用查询日志 (general query log)3.1.问题场景3.2.查看当前状态3.3.启动日志3.4.查看日志3.5.停止日志3.6.删除/刷新日志4.错误日志 (error log)4.1.启动日志4.2.查看日志4.3.删除/刷新日志5.二…

Glide图片框架源码解析

一、Glide几个基本概念 Model 表示数据的来源&#xff1b;加载图片的时候需要告诉Glide从哪获取这个图片&#xff0c;可以是url类型、本地文件类型、资源ID类型。不管什么类型&#xff0c;Glide都将其称为Model。 Data 从数据源中获取到model之后&#xff0c;把它加工成原始数…

java.swing 飞机大战小游戏

上午没事刷到网上最近炒热了一些简单的小游戏和爱心代码&#xff0c;单身8个月了&#xff0c;对爱心代码不是很感冒&#xff0c;所以想蹭个热度&#xff0c;写一个飞机大站来玩玩。 首先&#xff0c;分析小游戏需要那些技术与怎么设计&#xff1a; 窗体&#xff0c;因为是jav…

Python如何使用PyMySQL连接数据库

1&#xff1a;为什么要连接数据库呢&#xff1f; 做接口自动化测试的时候&#xff0c;我们需要校验数据是否正常入库&#xff0c;数据是否正确&#xff0c;来做断言处理&#xff1b;有的时候需要修改数据&#xff0c;去执行其他场景的测试用例&#xff1b;有的时候需要删除数据…

DOX-HSA/HGB/FITC/Glu人血清蛋白/血红蛋白/荧光素/葡萄糖修饰阿霉素

小编今天分享给大家的科研知识是DOX-HSA/HGB/FITC/Glu人血清蛋白/血红蛋白/荧光素/葡萄糖修饰阿霉素&#xff0c;来看&#xff01; DOX-HSA人血清蛋白偶联阿霉素相关&#xff1a; 采用阿霉素(Doxorubicin,DOX)与人血清白蛋白(HSA)经化学交联获得的偶联物。本品经过滤,溶于PBS…

Chapter4 利用机器学习解决分类和回归问题

目录 4.1 机器学习和神经网络基本概念 4.1.1 感知器 4.1.2 前向传播 4.1.3 反向传播 4.1.4 过拟合和欠拟合 4.2 利用神经网络解决回归问题 4.2.1 问题介绍 4.2.2 利用pytorch解析数据 4.2.2 利用pytorch定义网络结构 4.2.3 开始训练 4.2.4 将模型进行保存 4.3 利用p…