我正在使用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;
}
}
};
我该如何解决这个问题?
答案 0 :(得分:0)
在C ++中,当您NULL
时,标题会简单地粘贴到正文中。所以现在编译器看到了:
#include
这里有两个问题:
编译器会在不同的实体中看到class Node {
public:
Node(int order) {};
};
// stuff from system headers omitted for brevity
using namespace std;
class Node {
bool leaf;
//...
};
两次。
class Node
定义了两次(第一次为空Node::Node
)。
标题应包含类声明:
{}
请注意,构造函数在这里没有主体。这只是一个宣言。因为它使用 #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