2

我从 sourceForge 获得的这个 sourceFile 中有 26 个错误。它是斯坦福 CS106B 库的一部分,因此不应该有任何错误。

错误示例:

  • C2059:语法错误:'public C2990:'Iterator':非类模板已被声明为类模板
  • C2255:“朋友”:不允许在类定义之外
  • C2146:语法错误:缺少“;” 在标识符“foreachHook”之前
  • C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
  • C2065:“FE_State”:未声明的标识符

有了这么多错误,直觉可能是一个简单的原因,而不是 26 个复杂的原因。

/*
 * File: private/bst.h
 * Last modified on Fri Jun  5 15:40:43 2009 by eroberts
 * -----------------------------------------------------
 * This file contains the private section of the bst.h interface.
 * This portion of the class definition is taken out of the bst.h
 * header so that the client need not have to see all of these
 * details.
 */

public:

/*
 * Class: BST<ElemType>::Iterator
 * ------------------------------
 * This interface defines a nested class within the BST template that
 * provides iterator access to the keys contained in the BST.
 */

    class Iterator {
    public:
        Iterator();
        bool hasNext();
        ElemType next();

    private:
        struct iteratorMarkerT {
            void *np;
            bool processed;
        };

        Iterator(BST *bstp);
        BST *bstp;
        Stack<iteratorMarkerT> stack;
        long timestamp;
        void advanceToNextNode();
        void findLeftmostChild();
        friend class BST;
    };
    friend class Iterator;
    ElemType foreachHook(FE_State & _fe);

/*
 * Deep copying support
 * --------------------
 * This copy constructor and operator= are defined to make a
 * deep copy, making it possible to pass/return trees by value
 * and assign from one tree to another. The entire contents of
 * the tree, including all elements, are copied. Each tree
 * element is copied from the original tree to the copy using
 * assignment (operator=). Making copies is generally avoided
 * because of the expense and thus, trees are typically passed
 * by reference, however, when a copy is needed, these operations
 * are supported.
 */
    const BST & operator=(const BST & rhs);
    BST(const BST & rhs);

private:

/* Type definition for node in the tree */
    struct nodeT {
        ElemType data;
        nodeT *left, *right;
        int bf;    /* AVL balance factor */
    };

/* Constant definitions */
    static const int BST_RIGHT_HEAVY = +1;
    static const int BST_IN_BALANCE = 0;
    static const int BST_LEFT_HEAVY = -1;

/* Instance variables */
    nodeT *root;
    int numNodes;
    long timestamp;
    int (*cmpFn)(ElemType, ElemType);

/* Private method prototypes */
    nodeT *recFindNode(nodeT *t, ElemType & key);
    bool recAddNode(nodeT * & t, ElemType & key, bool & createdNewNode);
    bool recRemoveNode(nodeT * & t, ElemType & key, bool & didRemove);
    bool removeTargetNode(nodeT * & t);
    void updateBF(nodeT * & t, int bfDelta);
    void recDeleteTree(nodeT *t);
    void recBSTAll(nodeT *t, void (*fn)(ElemType));
    void fixRightImbalance(nodeT * & t);
    void fixLeftImbalance(nodeT * & t);
    void rotateRight(nodeT * & t);
    void rotateLeft(nodeT * & t);
    void copyOtherEntries(const BST & other);

/* Template method prototypes */

    template <typename ClientDataType>
    void recBSTAll(nodeT *t, void (*fn)(ElemType, ClientDataType &),
                   ClientDataType & data);
4

1 回答 1

1

此文件本身不会形成有效的 C++。如果您阅读评论,则将其取出bst.h以形成课程的私有部分,而客户(图书馆的用户)无需查看详细信息。只有当它进入正确的位置private/bst.h时才有意义。然后编译器将在正确的上下文中解析它。#includebst.h

查看此文件()上方bst.h目录中的文件。private/bst.h

于 2012-06-13T01:05:42.150 回答