有关此源文件中的 C++ 关键字的信息,请参见 新运算符 (C++) 和 删除运算符 (C++)。
25. 在“生成”菜单上,单击“生成解决方案”。
来自生成的输出应显示在“输出”窗口中。 这表示项目已编译,并且未发生错误。 如果未显示输出,请将您的代码与前面步骤中提供的代码进行比较。
演练:生成项目 (C++)
在本步骤中,您将故意在代码中引入一个 Visual C++ 语法错误,以了解什么是编译错误,以及如何修复它。 编译项目时,会显示错误消息以指示所发生的问题的性质和位置。
系统必备
本主题假定您具备 C++ 语言的基础知识。
使用 IDE 修复编译错误
1. 在 testgames.cpp 中,删除最后一行中的分号,使代码如下所示:
2. return 0
3. 在“生成”菜单上,单击“生成解决方案”。
4. “输出”窗口中显示一条消息,指示生成项目失败。
单击“输出”窗口中的“转到下一条消息”按钮(指向右方的绿色箭头)。 “输出”窗口中的错误消息和状态栏区域指示右大括号前缺少一个分号。
若要查看有关错误的更多帮助信息,请突出显示错误,并按 F1 键。 5. 将分号重新添加到导致语法错误的行的末尾:
6. return 0;
7. 在“生成”菜单上,单击“生成解决方案”。
“输出”窗口中显示一条消息,指示项目已正确编译。
演练:测试项目 (C++)
以“调试”模式运行程序使您可以使用断点来暂停程序,以检查变量和对象的状态。 在本步骤中,您将在程序运行时观察变量的值,并推断为什么值与预期的不同。
系统必备
本主题假定您具备 C++ 语言的基础知识。
以“调试”模式运行程序
1. 如果“testgames.cpp”文件不可见,请在编辑区域中单击该文件对应的选项卡。 2. 单击以下行,将其设置为编辑器中的当前行:
3. solitaire = new Cardgame(1);
4. 若要在该行上设置断点,请单击“调试”菜单上的“切换断点”,或者按 F9。 也可以单击
代码行左侧的区域来设置或清除断点。
设置了断点的代码行的左侧会显示一个红色圆圈。 5. 在“调试”菜单上,单击“开始调试”,或者按 F5。
当程序运行到包含断点的行时,执行将暂时停止(因为程序处于“中断”模式)。 代码行左侧的黄色箭头指示该行是要执行的下一个代码行。
6. 若要检查 Cardgame::totalparticipants 变量的值,请将鼠标指针悬停在该变
量上方。 该变量的名称及其值 12 即显示在工具提示窗口中。
右击 Cardgame::totalparticipants 变量。 选择“表达式:?totalparticipants?”,并单击“添加监视”以在“监视”窗口中显示该变量。 您也可以选择该变量并将其拖动到“监视”窗口。
7. 在“调试”菜单上,单击“逐过程”,或者按 F10 步进到下一行代码。
Cardgame::totalparticipants 的值现在显示为 13。
8. 右击 main 方法的最后一行 (return 0;),并单击“运行到光标处”。 代码左侧的黄色
箭头指向要执行的下一个语句。
9. 在 Cardgame 终止时,Cardgame::totalparticipants 数应当减小。此时,
Cardgame::totalparticipants应当等于 0,这是因为所有的 Cardgame 指针
都已删除,但是“监视 1”窗口指示Cardgame::totalparticipants 等于 18。 代码中存在一个 bug,您将在下一节中检测并修复它。 10. 在 调试 菜单上,单击 停止调试 或按 shift F5 以停止程序。
演练:调试项目 (C++)
在本步骤中,您将修改程序以修复在测试项目时发现的问题。
系统必备
本主题假定您具备 C++ 语言的基础知识。
修复包含 bug 的程序
1. 若要明白在 Cardgame 对象销毁时会发生什么,请查看 Cardgame 类的析构函数。
在“视图”菜单上,单击“类视图”,或者单击“解决方案资源管理器”窗口中的“类视图”选项卡。
展开“游戏”项目树并单击“Cardgame”类。 下方的区域显示类的成员和方法。
右击“~Cardgame(void)”析构函数并单击“转到定义”。 2. 要在 Cardgame 终止时减少 totalparticipants ,请
在 Cardgame::~Cardgame 析构函数的左大括号和右大括号之间键入以下代码:
3. totalparticipants -= players;
4. cout << players << \
here are now \
5. << totalparticipants << \6. } 7.
8. 进行更改后,Cardgame.cpp 文件应如下所示:
9. #include \10. #include
12. Cardgame::Cardgame(int p) 13. {
14. players = p;
15. totalparticipants += p;
16. cout << players << \
There are now \
17. << totalparticipants << \
endl; 18. } 19.
20. Cardgame::~Cardgame(void)
21. {
22. totalparticipants -= players;
23. cout << players << \
There are now \
24. << totalparticipants << \
endl; 25. }
26. 在“生成”菜单上,单击“生成解决方案”。
27. 在“调试”菜单上,单击“启动调试”,或按 F5,以“调试”模式运行该程序。 程序将在第
一个断点处暂停。
28. 在“调试”菜单上,单击“逐过程”或者按 F10 逐句通过程序。
请注意,执行每个 Cardgame 构造函数后,totalparticipants 的值会增大。 而在删除每个指针(并调用析构函数)后,totalparticipants 的值会减小。 29. 单步执行至程序的最后一行。 恰好在执行 return 语句之前,totalparticipants 等
于 0。 继续逐句执行程序,直到在 调试 菜单上单击 运行 或按 F5 退出或从而使程序得以继续运行,直到退出。
演练:部署程序 (C++)
现在,我们创建了应用程序,最后一步是创建可供其他用户在其计算机上安装该程序的安装程序。 为此,我们需要将新项目添加到现有解决方案。 此新项目的输出是 setup.exe 文件,该文件用于安装我们之前在另一台计算机上创建的应用程序。
Note 本主题中的信息不适用于 Visual C++ Express。 本演练将使用 Windows Installer 来部署应用程序。 您还可以使用 ClickOnce 部署应用程序。 有关更多信息,请参见 Visual C++ 应用程序的 ClickOnce 部署。 有关常规部署的更多信息,请参见部署应用程序和组件。
系统必备
本主题假定您具备 C++ 语言的基础知识。
此过程中使用的功能在 Visual C++ 学习版中不可用。
创建安装项目和安装程序
1. 在“文件”菜单上,单击“新建”,再单击“项目”。
随即出现“添加新项目”对话框。
2. 在“已安装的模板”下,展开“其他项目类型”节点。 接着,展开“安装和部署”节点并单击
“Visual Studio Installer”。
3. 从“模板”窗格中,选择“安装向导”。 键入安装项目的名称,例如 gameInstaller。 在“解
决方案”列表框中,选择“添加到解决方案”。 单击“确定”按钮。 4. 将出现“安装向导”。 单击“下一步”继续。
5. 从向导的“选择一种项目类型”窗格中,选择“为 Windows 应用程序创建一个安装程序”
选项,并单击“下一步”继续。
6. 从向导的“选择要包括的项目输出”窗格,选择“主输出 来自 游戏”,并单击“下一步”继
续。
7. 无需在安装程序中包括任何其他文件,因此,从安装程序的“选择要包括的文件”窗格中,
单击“下一步”。
8. 检查向导的更改,并验证所有内容是否正确。 单击“完成”创建项目。
“解决方案资源管理器”中将列出新的 gameInstaller 项目。 此项目将列出应用程序依靠的依赖项(如 C 运行库或 .NET Framework)以及安装程序中将包括的项目文件。 创建安装项目后,有许多选项可以更改。 有关更多信息,请参见 Windows Installer 部署。
9. 通过在“解决方案资源管理器”中选择安装程序并从“生成”菜单单击“生成
gameInstaller”来生成安装程序。
10. 找到上一节创建的 setup.exe 和 gameInstaller.msi 程序。 在计算机上双击任一文件安
装应用程序。
创建命令行应用程序 (C++)
我们已经学习了 Visual Studio IDE,现在可以开始使用 Visual C++ 编写程序了。 我们将学习创建的第一个应用程序类型是命令行应用程序。 命令行应用程序不包含图形用户界面 (GUI)。 通常,命令行应用程序从控制台读取输入,并将输出写入该控制台,而不是写入图形窗口。 在本节中,您将学习如何创建 C 和 C++ 命令行应用程序。 还将学习如何创建不使用 Microsoft 扩展的标准 C 和 C++ 程序。 如果您希望使用 Visual C++ 创建在其他操作系统上使用的应用程序,这将很有用。
系统必备