在模拟实现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;
};
补上后能正确运行: