C2011'节点':'类'类型重新定义

时间:2017-02-18 02:46:12

标签: c++

我正在使用c ++实现bptree。我陷入了节点创建的最初阶段。继续获取“C2011'Node':'类'类型重定义”错误。我在网上找到了一些从cpp文件中删除类关键字的建议。但是当我删除class关键字时,我会遇到很多其他错误。这是我的Node.cpp代码:

org.wso2.carbon.utils.Secret

和Node.h文件如下:

#include "Node.h"
#include <cstdio>
#include <iostream>
#include <string>
#include <map>


using namespace std;


 class Node {
    bool leaf;
    Node** kids;
    map<int, string> value;
    int  keyCount;//number of current keys in the node

    //constructor;
    Node::Node(int order) {
        this->value = {};
        this->kids = new Node *[order + 1];
        this->leaf = true;
        this->keyCount = 0;
        for (int i = 0; i < (order + 1); i++) {
            this->kids[i] = NULL;
        }           
    }
};

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题

在C ++中,当您NULL时,标题会简单地粘贴到正文中。所以现在编译器看到了:

#include

这里有两个问题:

  1. 编译器会在不同的实体中看到class Node { public: Node(int order) {}; }; // stuff from system headers omitted for brevity using namespace std; class Node { bool leaf; //... }; 两次。

  2. class Node定义了两次(第一次为空Node::Node)。

  3. 解决方案

    标题应包含类声明

    {}

    请注意,构造函数在这里没有主体。这只是一个宣言。因为它使用 #include <map> using namespace std; class Node { bool leaf; Node** kids; map<int, string> value; int keyCount;//number of current keys in the node //constructor; Node(int order); }; ,您需要在声明之前加入map并添加<map>

    之后,请不要将using namespace再次放入class Node.cpp文件中。只将方法实现放在顶层:

    .cc