suchen

Heim  >  Fragen und Antworten  >  Hauptteil

visual-studio – Beim Schreiben eines Binärbaums in C++ führt die Verwendung von Vorlagen und das Festlegen von Freundklassen zu einem Fehler.

Problembeschreibung

Wie der Titel schon sagt, habe ich kürzlich Datenstrukturen gelernt und sie in C++ implementiert. Bei der Implementierung eines Binärbaums sind die folgenden Probleme aufgetreten.

Im Code im Buch besteht der Binärbaum aus zwei DatenstrukturenBinaryTreeBinartTreeNode, und beide verwenden Vorlagen wie folgt:

template <class T>
class BinaryTreeNode{
friend class BinaryTree<T>;
private: 
    T data;
    BinaryTreeNode<T> *left;
    BinaryTreeNode<T> *right;
    /*...其他...其他...其他...*/
}

template <class T>
class BinaryTree{
private: 
    BinaryTreeNode<T> root;
    /*...其他...其他...其他...*/
}

Aber bei der Implementierung ist mir der folgende Fehler aufgefallen:

Beispielcode:

template <class T>
class BinaryTreeNode {
friend class BinaryTree<T>; /* 消除该句后可通过编译 */
private:
    T info;
    BinaryTreeNode<T> left;
    BinaryTreeNode<T> right;
};
template <class T>
class BinaryTree {
private:
    BinaryTreeNode<T> *root;
};

Fehler:

1>e:itc++binarytreebinarytreemybianrytree.h(20): error C2989: “BinaryTree”: 类 模板 已经声明为非类 模板

Fehler c2989

Screenshot:

Umgebung:

Visual Studio 2017 + Win10 (Mac-Dual-System)

Entschuldigung für die Störung! !

迷茫迷茫2789 Tage vor683

Antworte allen(1)Ich werde antworten

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:31:03

    template <class T> class BinaryTree; // 加一个前置声明
    
    template <class T>
    class BinaryTreeNode {
    friend class BinaryTree<T>; /* 消除该句后可通过编译 */
    private:
        T info;
        BinaryTreeNode<T> left;
        BinaryTreeNode<T> right;
    };
    template <class T>
    class BinaryTree {
    private:
        BinaryTreeNode<T> *root;
    };
    

    ps:segmentfault手机版真的跟屎一样啊,捏着鼻子用了这么久,才发现居然不能输入大于号小于号

    Antwort
    0
  • StornierenAntwort