我正在尝试初始化节点类中的节点数组,它们是私有成员:
#include<iostream>
#include<string>
using namespace std;
class Data
{
public:
long data;
Data(long dd)
{
data=dd;
}
void displaydata()
{
cout<<data <<" "<<endl;
}
};
class node
{
//these are what i have changed
const static int order=4;
int numitems;
node *parent;
vector<node>childarray(order);
vector<Data>itemarray(order-1);
};
但不幸的是它没有编译,错误是:
1>c:\users\dato\documents\visual studio 2010\projects\234_tree\234_tree\234_tree.cpp(26): error C2061: syntax error : identifier 'order'
1>c:\users\dato\documents\visual studio 2010\projects\234_tree\234_tree\234_tree.cpp(27): error C2061: syntax error : identifier 'order'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
来自以下java代码。
class DataItem
{
public long dData; // one data item
//--------------------------------------------------------------
public DataItem(long dd) // constructor
{ dData = dd; }
//--------------------------------------------------------------
public void displayItem() // display item, format “/27”
{ System.out.print(“/”+dData); }
//--------------------------------------------------------------
} // end class DataItem
////////////////////////////////////////////////////////////////
class Node
{
private static final int ORDER = 4;
private int numItems;
private Node parent;
private Node childArray[] = new Node[ORDER];
private DataItem itemArray[] = new DataItem[ORDER-1];
// -------------------------------------------------------------
// connect child to this node
public void connectChild(int childNum, Node child)
{
childArray[childNum] = child;
if(child != null)
child.parent = this;
}
// -------------------------------------------------------------
// disconnect child from this node, return it
public Node disconnectChild(int childNum)
{
Node tempNode = childArray[childNum];
childArray[childNum] = null;
return tempNode;
}
// -------------------------------------------------------------
public Node getChild(int childNum)
{ return childArray[childNum]; }
// -------------------------------------------------------------
public Node getParent()
{ return parent; }
// -------------------------------------------------------------
public boolean isLeaf()
Java Code for a 2-3-4 Tree 479
LISTING 10.1 Continued
{ return (childArray[0]==null) ? true : false; }
// -------------------------------------------------------------
public int getNumItems()
{ return numItems; }
// -------------------------------------------------------------
public DataItem getItem(int index) // get DataItem at index
{ return itemArray[index]; }
// -------------------------------------------------------------
public boolean isFull()
{ return (numItems==ORDER-1) ? true : false; }
// -------------------------------------------------------------
public int findItem(long key) // return index of
{ // item (within node)
for(int j=0; j<ORDER-1; j++) // if found,
{ // otherwise,
if(itemArray[j] == null) // return -1
break;
else if(itemArray[j].dData == key)
return j;
}
return -1;
} // end findItem
// -------------------------------------------------------------
public int insertItem(DataItem newItem)
{
// assumes node is not full
numItems++; // will add new item
long newKey = newItem.dData; // key of new item
for(int j=ORDER-2; j>=0; j--) // start on right,
{ // examine items
if(itemArray[j] == null) // if item null,
continue; // go left one cell
else // not null,
{ // get its key
long itsKey = itemArray[j].dData;
if(newKey < itsKey) // if it’s bigger
itemArray[j+1] = itemArray[j]; // shift it right
else
{
itemArray[j+1] = newItem; // insert new item
请帮我轻松转换代码,是否必须将订单声明为公开?我已经尝试但它不起作用,我也试过在课堂外宣布订单,比如 const int node :: order = 4 但是还没有成功,问题是什么?我需要数组,其中包含成员,大小应该是顺序或4.当我正在阅读本书时,作者说出你在本书中用C ++编写java代码时需要什么,它说指针,所以我添加了指针,但还没有成功。
答案 0 :(得分:1)
行
node *childarray[]=new node[order];
Data *itemarray[]=new Data[order-1];
在这里有误。除此之外,你不能在课堂上这样分配,你也有错误的声明。你宣称是childarray
是一个指针数组,但您将其创建为一个简单数组。将声明更改为
node *childarray;
Data *itemarray;
要实际进行分配,必须在构造函数中进行。
但是,我建议您改为使用std::array
(或可能是std::vector
)。
修改:使用std::array
:
struct node
{
static const int ORDER = 4;
int numitems;
node* parent;
std::array<node*, ORDER> childarray;
std::array<Data*, ORDER - 1> itemarray;
node()
: numitems{0},
parent{nullptr},
childarray{{nullptr}},
itemarray{{nullptr}}
{ }
};
现在childarray
和itemarray
是分别有ORDER
和ORDER - 1
个指针的数组,所有数据都已初始化为nullptr
(NULL
现在应该)。