【问题标题】:Bloodshed Dev-C++ compiler errors *Binary TreesBloodshed Dev-C++ 编译器错误 *二叉树
【发布时间】:2012-09-15 15:29:14
【问题描述】:

请对我的代码提供反馈。这是一个学校的作业,我们被要求编写一个交换左右二叉树的函数。我们的教授给我们上的课是 swapBinaryTrees,剩下的就交给我们了。我收到很多编译器错误,我不确定我的语法哪里出错了。我在编译时遇到错误,如第 14 行预期的 init-declarator '

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;


}

【问题讨论】:

  • Dev-C++ 的最新版本是 2005 年发布的。它非常老旧过时,请考虑升级到现代版本,如 GCC 或 Visual C++。
  • @SethCarnegie:这里有一个分支:orwelldevcpp.blogspot.fr,看起来维护得很好。
  • @AlexandreC。谢谢你的信息,我不知道任何叉子。我会在未来向人们推荐它。
  • @bitmask 作业标签正在被列入黑名单,请不要将其添加到问题中。有关更多信息,请参阅标签。
  • @Tim:标签 wiki 说“但不要在不查看问题是否需要清理的情况下删除它。”然而,这个问题特别指出它是关于家庭作业的。

标签: c++ compiler-errors binary-tree dev-c++


【解决方案1】:

您没有声明 binaryTreeSearch 类型。因此你不能为它实现成员函数。你的编译器告诉你它不知道你的意思是什么

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

&lt; 的位置,因为它不明白您打算将binaryTreeSearch 用作一个类。


写作时你在做什么:

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

这是吗?您是在告诉 C++,您打算实现一个类型为 int ()() 的成员函数 swapSubTreeNodes,该函数属于名称为 binaryTreeSearch 的结构化类型(即 classstruct),它使用一个参数进行模板化.但是,您的编译器(实际上是任何编译器)都会抱怨,因为没有这种类型。你如何解决这个问题取决于你真正打算做什么。一种选择可能是声明该类型:

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>*);
};

这不会修复所有错误,但可能是您打算做的。您可能还想添加适当的构造函数和析构函数。

【讨论】:

  • 所以我应该将其声明为“类”binaryTreeSearch 吗?
  • @Angie:我真的不确定是什么让你失望了,在这里。让我改写答案。
  • 好吧,弄清楚你在说什么并更新了我的代码(见上面对主代码的编辑)。现在还有一个我不确定的错误。谢谢。
  • @Angie:这不是它的工作方式。将您的示例减少到最低限度并打开一个单独的问题(您可以链接此问题)。原来的问题似乎已经解决了。
猜你喜欢
  • 2011-01-10
  • 2019-06-27
  • 2011-05-16
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多