Stage1st

 找回密码
 立即注册
搜索
查看: 3837|回复: 30
打印 上一主题 下一主题

[软件] 求助: C++代码 无法通过

[复制链接]
     
跳转到指定楼层
楼主
发表于 2024-4-11 16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 proof1 于 2024-4-11 20:53 编辑

《游戏编程入门(第4版)》,下载的随书源码。
书内采用VS2013版本。DirectX版本未指明,我用的是DX9。

前10章的例程,经调试微改后,都成功执行。
但第11章的例程,新加入音频效果。编译错误。附件是源码。
Play Sound Demo.rar (70.15 KB, 下载次数: 8)
百度网盘下载: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完全一样,一个字符不差。
前几章的,都编译通过,执行成功。根本没报这几行错误。

问题出在哪?



回复

使用道具 举报

     
2#
发表于 2024-4-11 17:06 | 只看该作者
NULL宏没定义好吧
回复

使用道具 举报

     
3#
 楼主| 发表于 2024-4-11 17:16 | 只看该作者
本帖最后由 proof1 于 2024-4-12 15:49 编辑

哪位网友可否下载一楼的源码,在本地编译后,上传一个 test.exe ? (若不允许exe类型,可放入rar压缩包,上传)看看是什么效果。
回复

使用道具 举报

     
4#
发表于 2024-4-11 17:25 来自手机 | 只看该作者
是cstddef 吗?
回复

使用道具 举报

     
5#
发表于 2024-4-11 17:26 | 只看该作者
proof1 发表于 2024-4-11 17:16
这个还需要用户参与吗?

在哪个位置? 库叫什么名字?

windows下开发windows的程序最好用微软的vs,自动配置各种东西
社区版的vs是免费的
回复

使用道具 举报

     
6#
发表于 2024-4-12 01:56 | 只看该作者
看上去是NULL不识别吗?把它改成0

—— 来自 S1Fun
回复

使用道具 举报

7#
发表于 2024-4-12 03:38 来自手机 | 只看该作者
本帖最后由 根正苗红 于 2024-4-12 03:42 编辑

NULL不是c++关键字。是巨硬库里的历史遗留。要么#include <windows.h>,要么换成nullptr
回复

使用道具 举报

     
8#
 楼主| 发表于 2024-4-12 08:18 | 只看该作者
本帖最后由 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


难道是这个原因?

sal.h (117.02 KB, 下载次数: 0)
回复

使用道具 举报

     
9#
 楼主| 发表于 2024-4-12 09:49 | 只看该作者
根正苗红 发表于 2024-4-12 03:38
NULL不是c++关键字。是巨硬库里的历史遗留。要么#include ,要么换成nullptr

第32行改成nullptr后,报错:
MyWindows.cpp:32: error: `nullptr' was not declared in this scope

是不是需要添加一行头文件或库文件?
回复

使用道具 举报

     
10#
发表于 2024-4-12 09:57 | 只看该作者
改成0, nullptr是c++11之后才有的
回复

使用道具 举报

11#
发表于 2024-4-12 10:20 | 只看该作者
自学不建议学c++11前的各种教材,现在的c++标准和以前的大相径庭,而且dx9早就退环境了,为啥不学dx12和vulkan
至于CFree的最新5.0版都是2010年的东西了,早就进坟墓了
回复

使用道具 举报

     
12#
发表于 2024-4-12 10:41 | 只看该作者
有种我上大学时候强行TURBO C的感觉

何必非要找过期教材学屠龙术呢
回复

使用道具 举报

     
13#
发表于 2024-4-12 10:58 | 只看该作者
dx12 马上快10年了,也不知道dx13还会不会有

微软说有几个头文件有NULL宏,具体没说哪个,不行就自己#define
回复

使用道具 举报

     
14#
 楼主| 发表于 2024-4-12 11:12 | 只看该作者
消亡值语义 发表于 2024-4-12 10:58
dx12 马上快10年了,也不知道dx13还会不会有

微软说有几个头文件有NULL宏,具体没说哪个,不行就自己#defi ...

#define 容易吗?  可否给出代码行?
回复

使用道具 举报

15#
发表于 2024-4-12 11:14 | 只看该作者
有功夫发帖,装个visualstudio不行么,服了

回复

使用道具 举报

     
16#
发表于 2024-4-12 11:16 来自手机 | 只看该作者
lz和之前的python侠是同一个人吗
回复

使用道具 举报

17#
发表于 2024-4-12 11:19 来自手机 | 只看该作者
本帖最后由 根正苗红 于 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自用也是免费的。
回复

使用道具 举报

     
18#
发表于 2024-4-12 11:22 | 只看该作者
本帖最后由 消亡值语义 于 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

回复

使用道具 举报

     
19#
发表于 2024-4-12 11:28 | 只看该作者
直接原因是 NULL 未定义,实际原因是有哪个 *.h 头文件没有引入,更深是配置错误头文件路径少了什么,更可能是有个必须的库(里面有*.h)没有安装。

自己定义 NULL 解决不了问题的,后面还会报啥啥未定义.

回复

使用道具 举报

20#
发表于 2024-4-12 11:38 | 只看该作者
Existinghomes 发表于 2024-4-12 11:16
lz和之前的python侠是同一个人吗

是古董侠,天天折腾上个世纪软硬件
回复

使用道具 举报

     
21#
发表于 2024-4-12 12:12 | 只看该作者
鉴定为没有安装windows sdk,装了就有了

#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
回复

使用道具 举报

     
22#
发表于 2024-4-12 14:36 | 只看该作者
安装 Visual Studio 2022 生成工具,然后用 VSCode 写就行了,不需要 Visual Studio

https://visualstudio.microsoft.com/zh-hans/downloads/

回复

使用道具 举报

     
23#
 楼主| 发表于 2024-4-12 15:50 | 只看该作者
viruswho 发表于 2024-4-12 11:28
直接原因是 NULL 未定义,实际原因是有哪个 *.h 头文件没有引入,更深是配置错误头文件路径少了什么,更可 ...

哪位网友可否下载一楼的源码,在本地编译后,上传一个 test.exe ? (若不允许exe类型,可放入rar压缩包,上传)
看看是什么效果。
回复

使用道具 举报

     
24#
发表于 2024-4-12 17:57 | 只看该作者

不,是win32子系统
回复

使用道具 举报

     
25#
发表于 2024-4-12 18:05 | 只看该作者
本帖最后由 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的分享

回复

使用道具 举报

     
26#
发表于 2024-4-12 18:52 | 只看该作者
本帖最后由 兔耳僵尸 于 2024-4-12 21:40 编辑

偷懒用msys2编译过了,就改了个dxerr9.h头文件名称


  1. g++ *.cpp -mwindows -ld3dx9 -ld3d9 -lwinmm -ldinput8 -ldxguid -ldsound -luuid -o test.exe
复制代码



回复

使用道具 举报

     
27#
 楼主| 发表于 2024-4-13 12:37 | 只看该作者
兔耳僵尸 发表于 2024-4-12 18:52
偷懒用msys2编译过了,就改了个dxerr9.h头文件名称

看到了截图,不错。
可否上传,可独立运行的exe文件?  (不让收传exe的话,放到压缩包里上传)
回复

使用道具 举报

     
28#
发表于 2024-4-13 13:15 来自手机 | 只看该作者
proof1 发表于 2024-4-13 12:37
看到了截图,不错。
可否上传,可独立运行的exe文件?  (不让收传exe的话,放到压缩包里上传) ...

这两天摸不到电脑
环境是msys2 ucrt64,编译就是那行代码
回复

使用道具 举报

     
29#
 楼主| 发表于 2024-4-13 17:00 | 只看该作者
兔耳僵尸 发表于 2024-4-13 13:15
这两天摸不到电脑
环境是msys2 ucrt64,编译就是那行代码
不好意思。
我只用过 集成开发环境(IDE)
msys2 ucrt64 不懂,编译没用过命令行。

等摸到电脑,麻烦上传一下。
回复

使用道具 举报

     
30#
发表于 2024-4-14 16:18 | 只看该作者
上传了
Play Sound Demo.7z (793.01 KB, 下载次数: 3)
回复

使用道具 举报

     
31#
 楼主| 发表于 2024-4-14 22:17 | 只看该作者
感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|stage1st 沪ICP备13020230号-1 沪公网安备 31010702007642号

GMT+8, 2024-5-4 16:18 , Processed in 0.044791 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表