Introduction to 3D Game Programming with DirectX 12一书学习记录(第一个例子编译错误)

博主在学习《Introduction to 3D Game Programming with DirectX 12》时遇到编译错误C2102,发现错误源于对临时变量取地址。通过创建简单示例验证问题,发现在VS2019中此行为导致编译错误,而VS2015可能对此检查更宽松。解决办法是将项目属性中的【语言】的【符合模式】设为否,降低检查严格度,从而使代码编译通过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备开始学一学d3d,听说《Introduction to 3D Game Programming with DirectX 12》这本书不错,于是就拿来学一学。不料第一个例子,按照书中的指示,就总是编译错误,错误的提示是“C2102 &要求左值”。

仔细去看错误所在的代码,发现代码中用&给一个临时变量取地址,看起确实不太合理,是不是错误呢? 我新建了一个工程,写了一个简单的例子:

#include <iostream>
using namespace std;

struct MyStruct
{
	MyStruct() { x = 0; }
	int x;
};

void func(MyStruct* para)
{
	cout << para->x << endl;
}

int main()
{
	func(&MyStruct());
	return 0;
}

编译。。。确实错误! 并且是同样的C2102错误。难道书中的例子错了,作者不可能把编译都不通过的例子给读者吧,这不合理。

因此可能就是运行环境的问题,书中的指示是按照VS 2015来的,我的环境是VS 2019。难道是这个错误再VS 2015中就不是错误,而在VS 2019中就是错误。听起来有可能,因为VS 2019确实检查比VS 2015严格。那有没有方法让VS 2019检查不那么严格呢,有的! 将项目属性中的【语言】的【符合模式】设置为,检查就不严格了。
在这里插入图片描述
重新编译简单样例,OK! 编译通过!

编译书中的这个例子,同样可以编译通过。 Yes!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值