0

私のコードに関するフィードバックをお願いします。これは学校の課題で、左側と右側の二分木を交換する関数を書くように求められました。教授がくれたクラスは swapBinaryTrees で、残りは私たちに任せました。大量のコンパイラ エラーが発生しており、構文のどこが間違っているのかわかりません。行 14 のようにコンパイルするとエラーが発生します init-declarator '<'token 参照の行は

void binaryTreeSearch<elemType>::swapSubtreeNodes()

19行目でも同じエラーがあります

void binaryTreeSearch<elemType>::swapSubtreeNodes(nodeType<elemType> *p)

上記の両方について、「;」を期待しているという別のエラーがあります。「<」トークンの前に、メイン関数で宣言されていない識別子を取得します

binaryTreeSearch<int> tree;

また、「int」と「;」の前に期待される一次式を取得しています。「int」の前に、cout と cin が宣言されていないことがわかります。ここで干し草が何をしているのかわかりません。以下にコード全体を投稿します。どんな助けも大歓迎です。

template <class elemType>
struct nodeType
{
       elemType info;
       nodeType<elemType> *lLink;
       nodeType<elemType> *rLink;
};
template <class elemType>
class swapSubtreeNodes
{

};
template <class elemType>
void binaryTreeSearch<elemType>::swapSubtreeNodes()
{
     swapSubtreeNodes(root);
}
template <class elemType>
void binaryTreeSearch<elemType>::swapSubtreeNodes(nodeType<elemType> *p)
{
    root = temp;
    nodeType<elemType> *root;
    nodeType<elemType> *temp;
    if (p == null)
    {
          return;
    }
    else
    {
        swapSubtreeNodes(p->lLink);
        swapSubtreeNodes(p->rLink);                                  
        temp = p->lLink;
        p->lLink = p->rLink;
        p->rLink = temp;
    }
}
int main()
{
    binaryTreeSearch<int> tree;
    int num;
    cout << "This is how we swap'em" << endl;
    cout << "Insert number (press enter after each one entered)." << endl;
    cout << "Enter -999 to complete" << endl;
    tree.insert(0);
    cin >> num;
    while (num != -999)
    {
          tree.insert(num);
          cin >> num;
    }
    cout << "Your swapped binary tree is " << endl;
         tree.swapSubtreeNodes();
         tree.printTree();
         cout << endl;


}
4

1 に答える 1

0

binaryTreeSearchタイプを宣言していません。したがって、メンバー関数を実装することはできません。あなたのコンパイラは、あなたが何を意味するのか見当がつかないとあなたに言っています

template <class elemType>
void binaryTreeSearch<elemType>::swapSubtreeNodes()

クラスの<つもりが分からないからとの立場で。binaryTreeSearch


あなたが書いているときにあなたがしていること:

template <class elemType>
void binaryTreeSearch<elemType>::swapSubtreeNodes()
{
     swapSubtreeNodes(root);
}

これは; 1 つのパラメーターでテンプレート化された名前の構造化型 (つまり aまたは a ) に属するswapSubTreeNodes型のメンバー関数を実装するつもりであることを C++ に伝えています。ただし、そのようなタイプがないため、コンパイラー (実際にはすべてのコンパイラー) は文句を言います。この問題をどのように修正するかは、実際に何をしようとしていたかによって異なります。1 つのオプションは、その型を宣言することです。int ()()classstructbinaryTreeSearch

template <class elemType>
class binaryTreeSearch // I really recommend to write types Uppercase!
{
  private:
    nodeType<elemType>* root;
    //                  ^---- that's the variably you are trying to
    //                        access in your original post
  public:
    void swapSubtreeNodes();
    void swapSubtreeNodes(nodeType<elemType>*);
};

これですべてのエラーが修正されるわけではありませんが、おそらく意図したとおりです。適切なコンストラクタとデストラクタを追加することもできます。

于 2012-09-15T15:33:04.393 に答える