求助: C++代码 无法通过
本帖最后由 proof1 于 2024-4-11 20:53 编辑《游戏编程入门(第4版)》,下载的随书源码。
书内采用VS2013版本。DirectX版本未指明,我用的是DX9。
前10章的例程,经调试微改后,都成功执行。
但第11章的例程,新加入音频效果。编译错误。附件是源码。
百度网盘下载:https://pan.baidu.com/s/1sMdtAyVKXYgqGJcxvj6kCQ?pwd=744x
环境:C-Free 5.0 + DirectX 9.0
32,33,35,37行 分别报错。
error: expected primary-expression before ';' token
32 wc.hIcon = NULL;
33 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
34 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
35 wc.lpszMenuName= NULL;
36 wc.lpszClassName = APPTITLE.c_str();
37 wc.hIconSm = NULL;
问题是,这个MyWindows.cpp,和6~10章的MyWindows.cpp完全一样,一个字符不差。
前几章的,都编译通过,执行成功。根本没报这几行错误。
问题出在哪?
NULL宏没定义好吧 本帖最后由 proof1 于 2024-4-12 15:49 编辑
哪位网友可否下载一楼的源码,在本地编译后,上传一个 test.exe ? (若不允许exe类型,可放入rar压缩包,上传)看看是什么效果。
是cstddef 吗? proof1 发表于 2024-4-11 17:16
这个还需要用户参与吗?
在哪个位置? 库叫什么名字?
windows下开发windows的程序最好用微软的vs,自动配置各种东西
社区版的vs是免费的
看上去是NULL不识别吗?把它改成0
—— 来自 S1Fun 本帖最后由 根正苗红 于 2024-4-12 03:42 编辑
NULL不是c++关键字。是巨硬库里的历史遗留。要么#include <windows.h>,要么换成nullptr 本帖最后由 proof1 于 2024-4-12 09:40 编辑
根正苗红 发表于 2024-4-12 03:38
NULL不是c++关键字。是巨硬库里的历史遗留。要么#include ,要么换成nullptr之前也报错:sal.h: No such file or directory
百度原因:
sal.h免费下载,使用DirectSound时用;C-Free编程时没有,只有安装VS后库里才有。
C-Free编程时有时会缺少这个东西,安装VS库里才自带这个;可以下载后直接使用,省的安装VS。我从VS2017库里找到的。
在网上下载sal.h文件并拷贝到所在目录(C:\Program Files\Microsoft SDKs\Include)即可。
sal.h下载:http://pan.baidu.com/s/1hswd5tU
于是下载了sal.h,放到lib或include里。
貌似是NULL定义的问题。sal.h里面确实有很多null ,比如:
#define _$null Null=SA_Yes
#define _$maybenull Null=SA_Maybe
#define _$notnull Null=SA_No
……
#define __null __declspec("SAL_null")
#define __notnull __declspec("SAL_notnull")
#define __maybenull __declspec("SAL_maybenull")
……
#define __null
#define __notnull
#define __maybenull
难道是这个原因?
根正苗红 发表于 2024-4-12 03:38
NULL不是c++关键字。是巨硬库里的历史遗留。要么#include ,要么换成nullptr
第32行改成nullptr后,报错:
MyWindows.cpp:32: error: `nullptr' was not declared in this scope
是不是需要添加一行头文件或库文件? 改成0, nullptr是c++11之后才有的 自学不建议学c++11前的各种教材,现在的c++标准和以前的大相径庭,而且dx9早就退环境了,为啥不学dx12和vulkan
至于CFree的最新5.0版都是2010年的东西了,早就进坟墓了 有种我上大学时候强行TURBO C的感觉
何必非要找过期教材学屠龙术呢 dx12 马上快10年了,也不知道dx13还会不会有
微软说有几个头文件有NULL宏,具体没说哪个,不行就自己#define
消亡值语义 发表于 2024-4-12 10:58
dx12 马上快10年了,也不知道dx13还会不会有
微软说有几个头文件有NULL宏,具体没说哪个,不行就自己#defi ...
#define 容易吗?可否给出代码行? 有功夫发帖,装个visualstudio不行么,服了
lz和之前的python侠是同一个人吗 本帖最后由 根正苗红 于 2024-4-12 11:25 编辑
proof1 发表于 2024-4-12 09:49
第32行改成nullptr后,报错:
MyWindows.cpp:32: error: `nullptr' was not declared in this scope
编译器需要支持c++11。装个vs吧。调Windows的API和用DirectX,不用vs是给自己找不自在。反正vs自用也是免费的。 本帖最后由 消亡值语义 于 2024-4-12 11:40 编辑
proof1 发表于 2024-4-12 11:12
#define 容易吗?可否给出代码行?
1,这个可能报错:
#ifndef NULL
#define NULL ((void*)0)
#endif
2,能把NULL 改成 MYNULL,最安全
#ifndef MYNULL
#define MYNULL ((void*)0)
#endif
3,我目前用vs 2019 可以正常:
#ifndef NULL
#define NULL 0
#endif
4,正常2
#undef NULL
#define NULL 0
直接原因是 NULL 未定义,实际原因是有哪个 *.h 头文件没有引入,更深是配置错误头文件路径少了什么,更可能是有个必须的库(里面有*.h)没有安装。
自己定义 NULL 解决不了问题的,后面还会报啥啥未定义.
Existinghomes 发表于 2024-4-12 11:16
lz和之前的python侠是同一个人吗
是古董侠,天天折腾上个世纪软硬件 鉴定为没有安装windows sdk,装了就有了
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0) 安装 Visual Studio 2022 生成工具,然后用 VSCode 写就行了,不需要 Visual Studio
https://visualstudio.microsoft.com/zh-hans/downloads/
viruswho 发表于 2024-4-12 11:28
直接原因是 NULL 未定义,实际原因是有哪个 *.h 头文件没有引入,更深是配置错误头文件路径少了什么,更可 ...
哪位网友可否下载一楼的源码,在本地编译后,上传一个 test.exe ? (若不允许exe类型,可放入rar压缩包,上传)
看看是什么效果。 兔耳僵尸 发表于 2024-4-11 17:25
是cstddef 吗?
不,是win32子系统 本帖最后由 CyanCloverFern 于 2024-4-12 18:08 编辑
遇见null直接写0,微软官方推荐的那本win32编程指南里windows class的注册里填的都是0
给你个工具链,里面是binutils + gcc + mingw-w64-crt + libstdcpp + glfw + glad,可能还有乱七八糟的。没有gnu make。
链接:https://pan.baidu.com/s/1P9jk2_TPe0QMgFgvbFOnwg
提取码:pxan
--来自百度网盘超级会员V8的分享
本帖最后由 兔耳僵尸 于 2024-4-12 21:40 编辑
偷懒用msys2编译过了,就改了个dxerr9.h头文件名称
g++ *.cpp -mwindows -ld3dx9 -ld3d9 -lwinmm -ldinput8 -ldxguid -ldsound -luuid -o test.exe
兔耳僵尸 发表于 2024-4-12 18:52
偷懒用msys2编译过了,就改了个dxerr9.h头文件名称
看到了截图,不错。
可否上传,可独立运行的exe文件?(不让收传exe的话,放到压缩包里上传) proof1 发表于 2024-4-13 12:37
看到了截图,不错。
可否上传,可独立运行的exe文件?(不让收传exe的话,放到压缩包里上传) ...
这两天摸不到电脑
环境是msys2 ucrt64,编译就是那行代码 兔耳僵尸 发表于 2024-4-13 13:15
这两天摸不到电脑
环境是msys2 ucrt64,编译就是那行代码不好意思。
我只用过 集成开发环境(IDE)
msys2 ucrt64 不懂,编译没用过命令行。
等摸到电脑,麻烦上传一下。 上传了
感谢
页:
[1]