vs2022报错C1001内部编译器错误的一个案例

        在模拟实现AVL树中的右左双旋时,因为个人失误,else if()中没写判断条件,不知道为什么VS没有在该位置报错,只是提示C1001错误。在网上搜了半天没有头绪,然后一段段代码注释看是哪段代码引发的问题,最后补上了else if()中的判断条件就顺利编译。

        后面尝试过模拟实现这个错误,但在别的文件中else if()同样没有写判断条件却能正确定位这个错误,仍不清楚这个错误触发的条件是什么。

没写判断条件:

	// 错误情况
    void RotateRL(Node* pParent)
	{
		Node* subR = pParent->_pRight;
		Node* subRL = subR->_pLeft;
		int bf = subRL->_bf;
		RotateR(pParent->_pRight);
		RotateL(pParent);

		subRL->_bf = 0;
		if (bf == 1)
		{
			subR->_bf = 0;
			pParent->_bf = 1;
		}
		else if (bf == -1)
		{
			subR->_bf = 1;
			pParent->_bf = 0;
		}
		else if () // 这个位置没写条件VS报错C1001
		{
			pParent->_bf = 0;
			subR->_bf = 0;
		}
		else
		{
			assert(false);
		}
	}

补上后能正确运行:


        后面又发现一个能导致C1001的错误,在类模板的成员函数里面出现语法错误就有可能导致C1001错误,比如没写分号、没写else if()中的判断条件等,不知道具体原因。

template<class T>
class A
{
public:
	bool Insert(const T& data)
	{
		if (_a == nullptr)
		{
			_a = new T(data) // 没写分号
		}
		else if () // 没写判断条件
			;
		
		return true;
	}

private:
	int* _a;
};

        

补上后能正确运行:

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QianChiLang1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值